我的编程空间,编程开发者的网络收藏夹
学习永远不晚

go微服务PolarisMesh服务端启动流程是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

go微服务PolarisMesh服务端启动流程是什么

这篇文章主要介绍“go微服务PolarisMesh服务端启动流程是什么”,在日常操作中,相信很多人在go微服务PolarisMesh服务端启动流程是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”go微服务PolarisMesh服务端启动流程是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

前话

polaris-server 作为PolarisMesh的控制面,该进程主要负责服务数据、配置数据、治理规则的管理以及下发至北极星SDK以及实现了xDS的客户端。

前期准备

  • golang 环境,需要1.17.x +

  • 准备 vscode 或者 goland

  • 从github中clone一份polaris-server的源码,这里推荐从release-vx.y.z分支中选择一个分支进行学习,以下文章将基于release-v1.12.0分支进行研究

正题

polaris-server.yaml 认识

# server启动引导配置bootstrap:  # 全局日志  logger:    ${日志scope名称,主要支持 config/auth/store/naming/cache/xdsv3/default}:      rotateOutputPath: ${日志文件位置}      errorRotateOutputPath: ${专门记录error级别的错误日志文件}      rotationMaxSize: ${单个日志文件大小最大值, 默认 100, 单位为 mb}      rotationMaxBackups: ${最大保存多少个日志文件, 默认 10}      rotationMaxAge: ${单个日志文件最大保存天数, 默认 7}      outputLevel: ${日志输出级别,debug/info/warn/error}  # 按顺序启动server  startInOrder:    open: true # 是否开启,默认是关闭    key: sz # 全局锁,锁的名称,根据锁名称进行互斥启动  # 注册为北极星服务  polaris_service:    probe_address: ${北极星探测地址,用于获取当前北极星server自身对外的IP, 默认为 ##DB_ADDR##}    enable_register: ${是否允许当前北极星进程进行自注册,即将自身的系统级服务注册通过北极星的服务注册能力进行注册,默认为 true}    isolated: ${注册的实例是否需要处理隔离状态,默认为 false}    services:      - name: polaris.checker # 北极星健康检查需要的系统级服务,根据该服务下的实例,进行健康检查任务的 hash 责任划分        protocols: # 注册的实例需要暴露的协议,即注册端口号          - service-grpc# apiserver,北极星对外协议实现层apiservers:  - name: service-eureka # 北极星支持 eureka 协议的协议层插件    option:      listenIP: "0.0.0.0"          # tcp server 的监听 ip      listenPort: 8761             # tcp server 的监听端口      namespace: default           # 设置 eureka 服务默认归属的北极星命名空间      refreshInterval: 10          # 定期从北极星的cache模块中拉取数据,刷新 eureka 协议中的数据缓存      deltaExpireInterval: 60      # 增量缓存过期周期      unhealthyExpireInterval: 180 # 不健康实例过期周期      connLimit:                   # 链接限制配置        openConnLimit: false       # 是否开启链接限制功能,默认 false        maxConnPerHost: 1024       # 每个IP最多的连接数        maxConnLimit: 10240        # 当前listener最大的连接数限制        whiteList: 127.0.0.1       # 该 apiserver 的白名单 IP 列表,英文逗号分隔        purgeCounterInterval: 10s  # 清理链接行为的周期        purgeCounterExpired: 5s    # 清理多久不活跃的链接  - name: api-http                 # 北极星自身 OpenAPI 协议层    option:      listenIP: "0.0.0.0"          # tcp server 的监听 ip      listenPort: 8090             # tcp server 的监听端口      enablePprof: true            # 是否开启 golang 的 debug/pprof 的数据采集      enableSwagger: true          # 是否开启 swagger OpenAPI doc 文档数据生成    api:                           # 设置允许开放的 api 接口类型      admin:                       # 运维管理 OpenAPI 接口        enable: true      console:                     # 北极星控制台 OpenAPI 接口        enable: true        include: [default]         # 需要暴露的 OpenAPI 分组      client:                      # 北极星客户端相关 OpenAPI 接口        enable: true        include: [discover, register, healthcheck]      config:                      # 北极星配置中心相关 OpenAPI 接口        enable: true        include: [default]  - name: service-grpc             # 北极星基于 gRPC 协议的客户端通信协议层,用于注册发现、服务治理    option:      listenIP: "0.0.0.0"      listenPort: 8091      enableCacheProto: true       # 是否开启 protobuf 解析缓存,对于内容一样的protobuf减少序列化      sizeCacheProto: 128          # protobuf 缓存大小      tls:                         # 协议层支持 tls 的配置        certFile: ""        keyFile: ""        trustedCAFile: ""    api:      client:        enable: true        include: [discover, register, healthcheck]  - name: config-grpc              # 北极星基于 gRPC 协议的客户端通信协议层,用于配置中心    option:      listenIP: "0.0.0.0"      listenPort: 8093      connLimit:        openConnLimit: false        maxConnPerHost: 128        maxConnLimit: 5120    api:      client:        enable: true  - name: xds-v3                   # 北极星实现的 xDSv3 协议层    option:      listenIP: "0.0.0.0"      listenPort: 15010      connLimit:        openConnLimit: false        maxConnPerHost: 128        maxConnLimit: 10240# 核心逻辑的配置auth:  # 鉴权插件  name: defaultAuth  option:    # token 加密的 salt,鉴权解析 token 时需要依靠这个 salt 去解密 token 的信息    # salt 的长度需要满足以下任意一个:len(salt) in [16, 24, 32]    salt: polarismesh@2021    # 控制台鉴权能力开关,默认开启    consoleOpen: true    # 客户端鉴权能力开关, 默认关闭    clientOpen: falsenamespace:  # 是否允许自动创建命名空间  autoCreate: truenaming:  auth:    open: false  # 批量控制器  batch:    ${批量控制器配置,支持 register/deregister/clientRegister/clientDeregister}:      open: true                 # 是否开启该批量控制器      queueSize: 10240           # 暂存任务数量      waitTime: 32ms             # 任务未满单次 Batch 数量的最大等待时间,时间到直接强制发起 Batch 操作      maxBatchCount: 128         # 单次 Batch 数量      concurrency: 128           # 处于批任务的 worker 协程数量      dropExpireTask: true       # 是否开启丢弃过期任务,仅用于 register 类型的批量控制器      taskLife: 30s              # 任务最大有效期,超过有效期则任务不执行,仅用于 register 类型的批量控制器# 健康检查的配置healthcheck:  open: true                     # 是否开启健康检查功能模块  service: polaris.checker       # 参与健康检查任务的实例所在的服务  slotNum: 30                    # 时间轮参数  minCheckInterval: 1s           # 用于调整实例健康检查任务在时间轮内的下一次执行时间,限制最小检查周期  maxCheckInterval: 30s          # 用于调整实例健康检查任务在时间轮内的下一次执行时间,限制最大检查周期  clientReportInterval: 120s     # 用于调整SDK上报实例健康检查任务在时间轮内的下一次执行时间  batch:                         # 健康检查数据的批量写控制器    heartbeat:      open: true      queueSize: 10240      waitTime: 32ms      maxBatchCount: 32      concurrency: 64  checkers:                      # 健康检查启用插件列表,当前支持 heartbeatMemory/heartbeatRedis,由于二者属于同一类型健康检查插件,因此只能启用一个    - name: heartbeatMemory      # 基于本机内存实现的健康检查插件,仅适用于单机版本    - name: heartbeatRedis       # 基于 redis 实现的健康检查插件,适用于单机版本以及集群版本      option:        kvAddr: ##REDIS_ADDR##   # redis 地址,IP:PORT 格式        # ACL user from redis v6.0, remove it if ACL is not available        kvUser: ##REDIS_USER#    # 如果redis版本低于6.0,请直接移除该配置项        kvPasswd: ##REDIS_PWD##  # redis 密码        poolSize: 200            # redis 链接池大小        minIdleConns: 30         # 最小空闲链接数量        idleTimeout: 120s        # 认为空闲链接的时间        connectTimeout: 200ms    # 链接超时时间        msgTimeout: 200ms        # redis的读写操作超时时间        concurrency: 200         # 操作redis的worker协程数量        withTLS: false# 配置中心模块启动配置config:  # 是否启动配置模块  open: true  cache:    #配置文件缓存过期时间,单位s    expireTimeAfterWrite: 3600# 缓存配置cache:  open: true  resources:    - name: service # 加载服务数据      option:        disableBusiness: false # 不加载业务服务        needMeta: true # 加载服务元数据    - name: instance # 加载实例数据      option:        disableBusiness: false # 不加载业务服务实例        needMeta: true # 加载实例元数据    - name: routingConfig # 加载路由数据    - name: rateLimitConfig # 加载限流数据    - name: circuitBreakerConfig # 加载熔断数据    - name: users # 加载用户、用户组数据    - name: strategyRule # 加载鉴权规则数据    - name: namespace # 加载命名空间数据    - name: client # 加载 SDK 数据# 存储配置store:  # 单机文件存储插件  name: boltdbStore  option:    path: ./polaris.bolt  ## 数据库存储插件  # name: defaultStore  # option:  #   master:                                     # 主库配置, 如果要配置 slave 的话,就把 master 替换为 slave 即可  #     dbType: mysql                             # 数据库存储类型  #     dbName: polaris_server                    # schema 名称  #     dbUser: ##DB_USER##                       # 数据库用户  #     dbPwd: ##DB_PWD##                         # 数据库用户密码  #     dbAddr: ##DB_ADDR##                       # 数据库连接地址,HOST:PORT 格式  #     maxOpenConns: 300                         # 最大数据库连接数  #     maxIdleConns: 50                          # 最大空闲数据库连接数  #     connMaxLifetime: 300 # 单位秒              # 连接的最大存活时间,超过改时间空闲连接将会呗释放  #     txIsolationLevel: 2 #LevelReadCommitted# 插件配置plugin: # 本次暂不涉及,后续文章在详细说明

源码组织

我们先来看下,北极星服务端源码的组织形式

➜  polaris-server git:(release-v1.12.0) tree -L 1.├── apiserver                  # 北极星对外协议实现层├── auth                       # 北极星的资源鉴权层├── bootstrap                  # 负责将北极星各个功能模块初始化、逐个启动├── cache                      # 北极星的资源缓存层,对于弱一致性读接口进行加速├── cmd                        # 简单实现几个 command 命令,start:启动北极星,version: 查询当前北极星进程版本├── common                     # 公共模块,放置api接口对象定义、功能模块的工具函数├── config                     # 北极星的配置中心├── main.go                    # main 函数所在文件,polaris-server 进程启动的入口├── maintain                   # 北极星自身运维能力模块├── namespace                  # 北极星命名空间模块,主要用于服务注册发现以及配置中心├── plugin                     # 北极星小功能插件模块,主要集中了各个旁路能力的默认插件实现├── plugin.go                  # 北极星的插件注册文件,利用 golang 的 init 机制├── polaris-server.yaml        # polaris-server 进程启动所需要的配置文件├── service                    # 北极星的服务注册发现中心、治理规则中心├── store                      # 北极星的存储层,已插件化,存在两个默认实现插件,一个是基于boltdb实现的单机存储插件,一个是基于MySQL实现的集群存储插件├── tool                       # 北极星的相关脚本,包含启动、关闭└── version                    # 编译期间注入版本信息

从源码的组织中可以看出,北极星各个功能模块的划分还是很清晰的,其核心的模块主要是以下六个

  • apiserver

  • bootstrap

  • cache

  • namespace

  • config

  • service

我们先来看看,是如何在bootstrap中完成对北极星各个功能模块的初始化以及逐个启动的

Bootstrap

先看看 bootstrap 下的源码文件组织

➜  bootstrap git:(release-v1.12.0) tree -L 1.├── config                 # bootstrap 在 polaris-server.yaml 中对应的配置对象├── run_darwin.go          # 用于 drawin 内核,阻塞 polaris-server 主协程不退出,并监听相应的os.Signal├── run_linux.go           # 用于 linux 内核,阻塞 polaris-server 主协程不退出,并监听相应的os.Signal├── run_windows.go         # 用于 window 内核,阻塞 polaris-server 主协程不退出,并监听相应的os.Signal├── self_checker.go        # 北极星服务端自身的心跳上报流程,保持自身注册的相关内置服务实例的健康└── server.go              # 北极星启动核心逻辑文件

既然 server.go 是服务端进程启动核心逻辑所在的文件,那我们就直接从他入手。

来到 server.go 文件中,立马就看到一个 Start(configFilePath string) 方法,毋庸置疑,这肯定就是北极星服务端启动的核心入口。我们来简单看看,server.go#Start(configFilePath string) 主要做了哪些事情

func Start(configFilePath string) {// 根据所给定的配置文件路径信息,加载对应的配置文件内容, 这里指的就是 polaris-server.yaml 中的内容cfg, err := boot_config.Load(configFilePath)        ...// 根据配置文件内容中对于日志模块的配置, 初始化日志模块err = log.Configure(cfg.Bootstrap.Logger)        // 初始化相关指标收集器metrics.InitMetrics()// 设置插件配置plugin.SetPluginConfig(&cfg.Plugin)// 初始化存储层store.SetStoreConfig(&cfg.Store)// 开启进入启动流程,初始化插件,加载数据等var tx store.Transaction        // 根据 ${bootstrap.startInOrder.key} 从存储层获取一把锁,如果锁获取成功,则继续执行tx, err = StartBootstrapInOrder(s, cfg)if err != nil {// 多次尝试加锁失败fmt.Printf("[ERROR] bootstrap fail: %v\n", err)return}        // 启动北极星服务端的功能模块(服务发现、服务治理、配置中心等等)err = StartComponents(ctx, cfg)...// 启动北极星的 apiserver 插件,对于 polaris-server.yaml 中配置的 apiserver 均会进行启动servers, err := StartServers(ctx, cfg, errCh)        // 北极星服务端自注册逻辑,方便其他节点感知到自己的存在if err := polarisServiceRegister(&cfg.Bootstrap.PolarisService, cfg.APIServers); err != nil {fmt.Printf("[ERROR] register polaris service fail: %v\n", err)return}        // 服务端启动完成,发起请求到存储层,释放名为${bootstrap.startInOrder.key}的锁        // 其他北极星节点便可以获取到锁之后继续完成自己的启动逻辑_ = FinishBootstrapOrder(tx)fmt.Println("finish starting server")        // 简单的死循环逻辑,监听 os.Signal 完成 apiserver 重启、服务端优雅下线逻辑RunMainLoop(servers, errCh)}

简单的梳理 server.go#Start(configFilePath string) 中逻辑,主要就是做了这么几个事情

  • 配置文件加载识别、初始化相关功能模块配置

  • 从存储层申请用于进程启动的分布式锁

  • 启动服务端功能模块

  • 释放自身对于启动分布式锁的占用

  • 启动 apiserver

接着我们来看下功能模块是如何逐个开启的。

功能模块启用

北极星的功能模块主要有三个

  • APIServer

  • 命名空间

  • 服务注册发现、服务治理

  • 配置中心

北极星的旁路功能模块则为

  • 数据存储层

  • 资源鉴权

  • 数据缓存

  • 运维模块

APIServer 模块初始化

北极星的 APIServer 层,通过插件化的设计,将北极星的能力通过各个协议对外提供,以及对其他注册中心组件的协议兼容。APIServer 的定义如下

type Apiserver interface {// GetProtocol API协议名GetProtocol() string// GetPort API的监听端口GetPort() uint32// Initialize API初始化逻辑Initialize(ctx context.Context, option map[string]interface{}, api map[string]APIConfig) error// Run API服务的主逻辑循环Run(errCh chan error)// Stop 停止API端口监听Stop()// Restart 重启APIRestart(option map[string]interface{}, api map[string]APIConfig, errCh chan error) error}

可以看到,APIServer interface 只是定义了 APIServer 插件的相关生命周期定义,并没有具体限制 APIServer 改如何处理数据请求,因此使得 APIServer 相关插件实现,即可以将北极星的能力通过 gRPC、HTTP 协议对外提供,同时也可以通过 APIServer 插件对 eureka、xds 等第三方协议进行适配,将其转换为北极星的相关能力接口以及数据模型。 当前北极星 APIServer 已有的插件列表如下

  • httpserver: 通过 HTTP 协议对外提供北极星服务端的 OpenAPI 以及和客户端进行数据通信的 ClientAPI

  • grpcserver: 通过 gRPC 协议提供北极星和客户端进行数据通信

  • eurekaserver: 通过 HTTP 协议,将 eureka 的能力适配成北极星的相关能力接口,以及将 eureka 数据模型映射为北极星的数据模型

  • xdsv3server: 根据 xds control plane 的协议标准,将北极星的服务模型、治理模型转为 xds 模型,对外提供 xds 的能力,使得北极星可以对接 envoy 等相关基于 xds 实现的数据面

数据缓存模块初始化

// StartComponents start health check and naming componentsfunc StartComponents(ctx context.Context, cfg *boot_config.Config) error {    var err error    ...    // 初始化缓存模块    if err := cache.Initialize(ctx, &cfg.Cache, s); err != nil {        return err    }}

缓存层模块初始化的触发在 StartComponents 流程中,在初始化过程中,会根据 polaris-server.yaml 配置文件中关于 cache 配置的 resources 列表,按需启动相关资源的 cache 实现

// 构建 CacheManager 对象实例,并构造所有资源的 Cache 接口实现实例func newCacheManager(_ context.Context, cacheOpt *Config, storage store.Store) (*CacheManager, error) {SetCacheConfig(cacheOpt)mgr := &CacheManager{storage:       storage,caches:        make([]Cache, CacheLast),comRevisionCh: make(chan *revisionNotify, RevisionChanCount),revisions:     map[string]string{},}        // 构建服务实例缓存 cacheic := newInstanceCache(storage, mgr.comRevisionCh)        // 构建服务缓存 cachesc := newServiceCache(storage, mgr.comRevisionCh, ic)mgr.caches[CacheService] = scmgr.caches[CacheInstance] = ic        // 构建路由规则缓存 cachemgr.caches[CacheRoutingConfig] = newRoutingConfigCache(storage, sc)// 构建限流规则缓存 cachemgr.caches[CacheRateLimit] = newRateLimitCache(storage)        // 构建熔断规则缓存 cachemgr.caches[CacheCircuitBreaker] = newCircuitBreakerCache(storage)notify := make(chan interface{}, 8)        // 构建用户列表缓存 cachemgr.caches[CacheUser] = newUserCache(storage, notify)        // 构建鉴权策略缓存 cachemgr.caches[CacheAuthStrategy] = newStrategyCache(storage, notify, mgr.caches[CacheUser].(UserCache))        // 构建命名空间缓存 cachemgr.caches[CacheNamespace] = newNamespaceCache(storage)        // 构建SDK实例信息缓存 cachemgr.caches[CacheClient] = newClientCache(storage)if len(mgr.caches) != CacheLast {return nil, errors.New("some Cache implement not loaded into CacheManager")}...        // 根据 polaris-server.yaml 配置完成最终的缓存模块启动if err := mgr.initialize(); err != nil {return nil, err}return mgr, nil}// initialize 缓存对象初始化func (nc *CacheManager) initialize() error {for _, obj := range nc.caches {var option map[string]interface{}                // 根据配置文件中的 resource 列表,按需启动相关的 cachefor _, entry := range config.Resources {if obj.name() == entry.Name {option = entry.Optionbreak}}if err := obj.initialize(option); err != nil {return err}}return nil}

资源鉴权模块初始化

// StartComponents start health check and naming componentsfunc StartComponents(ctx context.Context, cfg *boot_config.Config) error {...cacheMgn, err := cache.GetCacheManager()if err != nil {return err}// 初始化鉴权层if err = auth.Initialize(ctx, &cfg.Auth, s, cacheMgn); err != nil {return err}}

资源鉴权模块初始化的触发在 StartComponents 流程中,由于资源鉴权模块主要任务是根据配置的鉴权规则,针对每次请求都进行一次策略计算,因此为了节省查询相关规则的时间,以及鉴权规则信息、用户信息变化不频繁的假定之下,资源鉴权模块默认从资源缓存模块中获取相关对象,执行计算并返回最终的资源鉴权结果。

命名空间模块模块初始化

// StartComponents start health check and naming componentsfunc StartComponents(ctx context.Context, cfg *boot_config.Config) error {        ...// 初始化命名空间模块if err := namespace.Initialize(ctx, &cfg.Namespace, s, cacheMgn); err != nil {return err}}

命名空间模块初始化的触发在 StartComponents 流程中,polaris 的服务注册发现、配置中心的模型设计中都依赖命名空间,因此将命名空间相关能力独立出来。 命名空间模块相关的数据操作不是非常频繁,数据操作都是直接和数据存储层进行交互,而依赖缓存模块则是为了解决在创建服务、配置时触发的命名空间自动创建动作,为了减少对数据存储层的调用,通过缓存存在性判断以及 singleflight.Group 组件来实现。

服务注册发现、服务治理模块初始化

// StartComponents start health check and naming componentsfunc StartComponents(ctx context.Context, cfg *boot_config.Config) error {        ...// 初始化服务发现模块相关功能if err := StartDiscoverComponents(ctx, cfg, s, cacheMgn, authMgn); err != nil {return err}}

服务注册发现、服务治理模块初始化的触发在 StartComponents 流程中的 StartDiscoverComponents 方法。StartDiscoverComponents 具体做的事情如下

  • 创建注册、反注册批量控制器

    • 为了提高服务端注册、反注册的TPS,这里做了一个数据写操作的Batch优化,尽可能将一段时间内一定量的数据写操作合并成一个大的数据写操作发往数据存储层,减少对于数据存储层的调用次数以及带来的额外网络开销,提升整体服务端的请求吞吐量

  • 创建服务实例健康检查组件

    • 对于服务实例的健康状态检查,有专门的 HealthCheckerServer 进行处理,该模块会监听缓存模块中的InstanceCache的数据变化事件,从中选择开启了健康检查的实例,将其纳入健康检查任务的TimeWheel中进行周期性调度检查

    • 实例的健康检查机制,当前 polaris 服务端做了插件化设计,默认 HealthCheck 插件实现为检查实例的心跳上报周期,该实现有两种具体的实现方式,针对单机模式来说具体实现为 heartbeatMemory,即实例的心跳数据存储在服务端内部中;针对集群模式来说具体实现为 heartbeatRedis,即实例的心跳数据存储在 redis 集群中,从而各个服务端节点都可以获取到任意实例的上次心跳上报时间。

  • 创建 naming.Service 接口实例,完成服务注册发现、服务治理模块的初始化

  • 创建带 auth 能力的 naming.Service 接口实例,注入资源权限检查能力。

配置中心模块初始化

// StartComponents start health check and naming componentsfunc StartComponents(ctx context.Context, cfg *boot_config.Config) error {        ...// 初始化配置中心模块相关功能if err := StartConfigCenterComponents(ctx, cfg, s, cacheMgn, authMgn); err != nil {return err}}

配置中心模块初始化的触发在 StartComponents 流程中的 StartConfigCenterComponents 方法。StartConfigCenterComponents 具体做的事情如下

  • 创建配置文件缓存组件,加速客户端读取配置文件,减少和存储层的交互次数

  • 创建 Watch 客户端链接管理组件,管理每条链接上感兴趣的配置文件列表。

  • 创建配置发布事件中心,通过配置发布事件以及 Watch 客户端连接管理组件,将相关配置变更事件通知给相关的客户端,实现配置监听能力

到此,关于“go微服务PolarisMesh服务端启动流程是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

go微服务PolarisMesh服务端启动流程是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

go微服务PolarisMesh服务端启动流程是什么

这篇文章主要介绍“go微服务PolarisMesh服务端启动流程是什么”,在日常操作中,相信很多人在go微服务PolarisMesh服务端启动流程是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”go微服务
2023-07-05

go微服务PolarisMesh源码解析服务端启动流程

这篇文章主要为大家介绍了go微服务PolarisMesh源码解析服务端启动流程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-01-28

移动服务器托管流程是什么

移动服务器托管流程一般包括以下步骤:1. 确定托管需求:确定需要托管的服务器类型、规格、数量和期限等。2. 选择托管服务商:根据需求和预算,选择合适的托管服务商。3. 预约上架时间:与托管服务商协商好上架时间,确保服务器能够按时上架。4.
2023-06-13

移动服务器租用流程是什么

移动服务器租用流程一般包括以下步骤:1. 确定需求:确定需要租用的服务器类型、配置、使用时间和预算等信息。2. 选择服务商:根据需求选择合适的服务商,比较不同服务商的价格、服务质量、技术支持等方面。3. 签订合同:与服务商签订租赁合同,明确
2023-06-05

Eureka源码阅读解析Server服务端启动流程实例

这篇文章主要为大家介绍了Eureka源码阅读解析Server服务端启动流程实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

Go 协程在微服务架构中的作用是什么?

Go 协程在微服务架构中的作用在微服务架构中,Go 协程是一种有价值的工具,它允许并发的执行多个任务,而不需要管理线程。这可以显著提高应用程序的吞吐量,同时降低复杂性和资源消耗。什么是协程?协程是一种用户态线程,它允许在单个进程中同时
Go 协程在微服务架构中的作用是什么?
2024-05-21

云服务器开启端口命令是什么

云服务器通常会在系统设置中启用端口映射功能,以便将特定的远程IP地址分配到指定的端口号上。例如,您可以将GooglePlay的https://accounts.google.com/portal端口映射为您的主机名(即您使用的主机IP地址),将your-site-name-foundation端口映射为您提供的用户名(即您使用的主机名称),以及将web-app-plgin-server-portal端口映射为您提供的端口号。这些端口映射的设置通常会在操作系统的网络设置中进行。以下是一些常见的云服务...
2023-10-27

oracle服务器启动的顺序是什么

Oracle服务器启动的顺序如下:1、确保操作系统已经启动。2、启动监听器(LSNRCTL)。3、启动Oracle数据库实例。4、启动Oracle Enterprise Manager数据库控制台(EMCTL)。在启动Oracle数据库实例
2023-03-22

linux启动oracle服务的步骤是什么

启动Oracle服务的步骤如下:登录到Linux系统上的Oracle用户。打开终端窗口,并输入以下命令以切换到Oracle用户:su - oracle确保Oracle环境变量已经正确设置。可以使用以下命令来检查:echo $ORACLE_
2023-10-25

Linux启动tomcat服务的方法是什么

Linux启动tomcat服务的方法是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。tomcat简介:Tomcat运行时占用的系统资源小,扩展性好,支持负载均衡与邮件服
2023-06-28

Go语言从单体服务到微服务设计方法是什么

这篇文章主要介绍“Go语言从单体服务到微服务设计方法是什么”,在日常操作中,相信很多人在Go语言从单体服务到微服务设计方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go语言从单体服务到微服务设计方法
2023-07-05

云服务器工作流程是什么

概述:云服务器工作流程涉及从设置、配置、管理到维护的多项步骤,以确保服务器有效运行和满足用户需求。设置:选择供应商、创建实例、配置网络和安装操作系统。管理:访问、安装软件、配置服务、监控服务器。维护:安全更新、备份、故障排除、硬件或软件更新。扩展和弹性:按需扩展、负载均衡、灾难恢复。监控和优化:性能监控、成本优化、自动任务。
云服务器工作流程是什么
2024-04-13

vps服务器开发流程是什么

VPS服务器开发流程可以分为以下几个步骤:1. 需求分析:与客户或团队成员合作,明确VPS服务器的功能需求和技术要求。2. 系统设计:根据需求分析的结果,设计VPS服务器的整体架构和模块划分,确定所需的硬件和软件环境。3. 编码实现:根据系
2023-09-08

云服务器托管流程是什么

云服务器托管流程一般包括以下步骤:1. 选择云服务器托管服务提供商:根据自己的需求选择适合的云服务器托管服务提供商。2. 选择云服务器配置:根据自己的需求选择合适的云服务器配置,包括 CPU、内存、存储等。3. 购买云服务器:根据选择的配置
2023-06-06

云服务器工作流程是什么

云服务器工作流程通常包括以下几个步骤:1. 创建虚拟机实例:用户根据自己的需求,在云服务提供商的控制面板上创建虚拟机实例。用户可以选择操作系统、计算资源配置、存储容量等。2. 配置网络设置:用户可以设置虚拟机的网络配置,包括公网IP、子网、
2023-09-26

服务器租用的流程是什么

服务器租用的流程通常包括以下几个步骤:选择服务器租用服务提供商:根据自身需求选择适合的服务器租用服务提供商。选择服务器规格和配置:根据自身需求和预算选择合适的服务器规格和配置,包括CPU、内存、存储空间等。下单和支付:在服务器租用服务提
服务器租用的流程是什么
2024-04-09

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录