Skip to content

Commit

Permalink
instance register, add endpoints key to improve performance (#164)
Browse files Browse the repository at this point in the history
* instance register optimization

* instance register optimization

* instance register optimization

* instance register optimization, 2.serivce version max len is 3

* instance register optimization, 2.serivce version max len is 3
  • Loading branch information
aseTo2016 authored and asifdxtreme committed Nov 20, 2017
1 parent 4eda42b commit e67710c
Show file tree
Hide file tree
Showing 10 changed files with 2,272 additions and 50 deletions.
2 changes: 1 addition & 1 deletion server/core/common.go
Expand Up @@ -60,7 +60,7 @@ func init() {
serviceNameForFindRegex, _ := regexp.Compile(`^[a-zA-Z0-9]*$|^[a-zA-Z0-9][a-zA-Z0-9_\-.:]*[a-zA-Z0-9]$`)
//name模糊规则: name, *
nameFuzzyRegex, _ := regexp.Compile(`^[a-zA-Z0-9]*$|^[a-zA-Z0-9][a-zA-Z0-9_\-.]*[a-zA-Z0-9]$|^\*$`)
VersionRegex, _ = regexp.Compile(`^[0-9]+(\.[0-9]+)*$`)
VersionRegex, _ = regexp.Compile(`^[0-9]+(\.[0-9]+){0,2}$`)
// version模糊规则: 1.0, 1.0+, 1.0-2.0, latest
versionFuzzyRegex, _ := regexp.Compile(`^[0-9]*$|^[0-9]+(\.[0-9]+)*\+{0,1}$|^[0-9]+(\.[0-9]+)*-[0-9]+(\.[0-9]+)*$|^latest$`)
pathRegex, _ := regexp.Compile(`^[A-Za-z0-9.,?'\\/+&%$#=~_\-@{}]*$`)
Expand Down
19 changes: 19 additions & 0 deletions server/core/key_generator.go
Expand Up @@ -38,6 +38,7 @@ const (
REGISTRY_DEPENDENCY_KEY = "deps"
REGISTRY_DEPS_RULE_KEY = "dep-rules"
REGISTRY_METRICS_KEY = "metrics"
ENDPOINTS_ROOT_KEY = "endpoints"
)

func GetRootKey() string {
Expand Down Expand Up @@ -372,3 +373,21 @@ func GenerateProjectKey(domain, project string) string {
project,
}, "/")
}

func GenerateEndpointsRootKey(domainProject string) string {
return util.StringJoin([]string{
GetRootKey(),
REGISTRY_INSTANCE_KEY,
ENDPOINTS_ROOT_KEY,
domainProject,
}, "/")
}

func GetEndpointsIndexKey(domainProject string, region string, availableZone string, endpoints string) string {
return util.StringJoin([]string{
GenerateEndpointsRootKey(domainProject),
region,
availableZone,
endpoints,
}, "/")
}
17 changes: 17 additions & 0 deletions server/core/microservice.go
Expand Up @@ -35,6 +35,8 @@ const (
REGISTRY_DEFAULT_LEASE_RETRYTIMES int32 = 3

IS_SC_SELF = "sc_self"
DEFAULT_REGION = "default"
DEFAULT_AVAILABLEZONE = "default"
)

func init() {
Expand Down Expand Up @@ -123,3 +125,18 @@ func HeartbeatRequest() *pb.HeartbeatRequest {
InstanceId: Instance.InstanceId,
}
}

func GetRegionAndAvailableZone(in *pb.DataCenterInfo) (region string, availableZone string){
if in == nil {
return DEFAULT_REGION, DEFAULT_AVAILABLEZONE
}
region = in.Region
if region == "" {
region = DEFAULT_REGION
}
availableZone = in.AvailableZone
if availableZone == "" {
availableZone = DEFAULT_AVAILABLEZONE
}
return
}
7 changes: 7 additions & 0 deletions server/core/registry/store/store.go
Expand Up @@ -39,6 +39,7 @@ const (
DEPENDENCY
DEPENDENCY_RULE
PROJECT
ENDPOINTS
typeEnd
)

Expand All @@ -59,6 +60,7 @@ var TypeNames = []string{
DEPENDENCY: "DEPENDENCY",
DEPENDENCY_RULE: "DEPENDENCY_RULE",
PROJECT: "PROJECT",
ENDPOINTS: "ENDPOINTS",
}

var TypeRoots = map[StoreType]string{
Expand All @@ -76,6 +78,7 @@ var TypeRoots = map[StoreType]string{
DEPENDENCY: apt.GetServiceDependencyRootKey(""),
DEPENDENCY_RULE: apt.GetServiceDependencyRuleRootKey(""),
PROJECT: apt.GetProjectRootKey(""),
ENDPOINTS: apt.GenerateEndpointsRootKey(""),
}

var store *KvStore
Expand Down Expand Up @@ -274,6 +277,10 @@ func (s *KvStore) Project() *Indexer {
return s.indexers[PROJECT]
}

func (s *KvStore) Endpoints() *Indexer {
return s.indexers[ENDPOINTS]
}

func (s *KvStore) KeepAlive(ctx context.Context, opts ...registry.PluginOpOption) (int64, error) {
op := registry.OpPut(opts...)

Expand Down
24 changes: 18 additions & 6 deletions server/service/instances.go
Expand Up @@ -19,7 +19,6 @@ import (
"fmt"
errorsEx "github.com/ServiceComb/service-center/pkg/errors"
"github.com/ServiceComb/service-center/pkg/util"
"github.com/ServiceComb/service-center/server/core"
apt "github.com/ServiceComb/service-center/server/core"
pb "github.com/ServiceComb/service-center/server/core/proto"
"github.com/ServiceComb/service-center/server/core/registry"
Expand Down Expand Up @@ -75,26 +74,30 @@ func (s *InstanceController) Register(ctx context.Context, in *pb.RegisterInstan
//如果没填写 并且endpoints沒重復,則产生新的全局instance id
oldInstanceId := ""

var endpointsIndexKey string
if instanceId == "" {
util.Logger().Infof("start register a new instance: service %s", instanceFlag)
if len(instance.Endpoints) != 0 {
oldInstanceId, err = serviceUtil.CheckEndPoints(ctx, in)
oldInstanceId, endpointsIndexKey, err = serviceUtil.CheckEndPoints(ctx, in)
if err != nil {
util.Logger().Errorf(err, "register instance failed, service %s, operator %s: check endpoints failed.", instanceFlag, remoteIP)
return &pb.RegisterInstanceResponse{
Response: pb.CreateResponse(pb.Response_FAIL, err.Error()),
}, nil
}
if oldInstanceId != "" {
instanceId = oldInstanceId
instance.InstanceId = instanceId
util.Logger().Infof("instance more exist.")
return &pb.RegisterInstanceResponse{
Response: pb.CreateResponse(pb.Response_SUCCESS, "instance more exist."),
InstanceId: oldInstanceId,
}, nil
}
}
}

var reporter quota.QuotaReporter
if len(oldInstanceId) == 0 {
if !core.ISSCSelf(ctx) {
if !apt.ISSCSelf(ctx) {
var err error
var ok bool
reporter, ok, err = quota.QuotaPlugins[quota.QuataType]().Apply4Quotas(ctx, quota.MicroServiceInstanceQuotaType, domainProject, in.Instance.ServiceId, 1)
Expand Down Expand Up @@ -188,6 +191,16 @@ func (s *InstanceController) Register(ctx context.Context, in *pb.RegisterInstan
registry.WithLease(leaseID), registry.WithIgnoreLease()))
}

if endpointsIndexKey != "" {
value := util.StringJoin([]string{
instance.ServiceId,
instanceId,
}, "/")
opts = append(opts, registry.OpPut(registry.WithStrKey(endpointsIndexKey),
registry.WithStrValue(value),
registry.WithLease(leaseID), registry.WithIgnoreLease()))
}

// Set key file
_, err = registry.GetRegisterCenter().Txn(ctx, opts)
if err != nil {
Expand All @@ -204,7 +217,6 @@ func (s *InstanceController) Register(ctx context.Context, in *pb.RegisterInstan
instanceFlag, instanceId, remoteIP)
}
}

util.Logger().Infof("register instance successful service %s, instanceId %s, operator %s.", instanceFlag, instanceId, remoteIP)
return &pb.RegisterInstanceResponse{
Response: pb.CreateResponse(pb.Response_SUCCESS, "Register service instance successfully."),
Expand Down
2 changes: 1 addition & 1 deletion server/service/instances_test.go
Expand Up @@ -215,7 +215,7 @@ var _ = Describe("InstanceController", func() {
Instance: &pb.MicroServiceInstance{
ServiceId: scServiceId,
Endpoints: []string{
"rest:127.0.0.1:8080",
"rest:127.0.0.1:8081",
},
HostName: "UT-HOST",
Status: pb.MSI_UP,
Expand Down

0 comments on commit e67710c

Please sign in to comment.