go语言微服务架构师 go 微服务架构

Go - Micro微服务框架实践 - API(十三)

Micro的api就是api网关

在若羌等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站设计制作、网站设计 网站设计制作按需设计,公司网站建设,企业网站建设,成都品牌网站建设,全网营销推广,成都外贸网站制作,若羌网站建设费用合理。

API参考了 API网关模式 为服务提供了一个单一的公共入口。基于服务发现,使得micro api可以提供具备http及动态路由的服务。

Micro的API基于HTTP协议。请求的API接口通过HTTP协议访问,并且路由是基于服务发现机制向下转发的。 Micro API在 go-micro 之上开发,所以它集成了服务发现、负载均衡、编码及基于RPC的通信。

因为micro api内部使用了go-micro,所以它自身也是可插拔的。 参考 go-plugins 了解对gRPC、kubernetes、etcd、nats、及rabbitmq等支持。另外,api也使用了 go-api ,这样,接口handler也是可以配置的。

ACME( Automatic Certificate Management Environment)是由 Let’s Encrypt 制定的安全协议。

可以选择是否配置白名单

API服务支持TLS证书

API使用带分隔符的命名空间来在逻辑上区分后台服务及公开的服务。命名空间及http请求路径会用于解析服务名与方法,比如 GET /foo HTTP/1.1 会被路由到 go.micro.api.foo 服务上。

API默认的命名空间是 go.micro.api ,当然,也可以修改:

我们演示一个3层的服务架构:

完整示例可以参考: examples/greeter

先决条件:我们使用Consul作为默认的服务发现,所以请先确定它已经安装好了,并且已经运行,比如执行 consul agent -dev 这样子方式运行。

向micro api发起http请求

HTTP请求的路径 /greeter/say/hello 会被路由到服务 go.micro.api.greeter 的方法 Say.Hello 上。

绕开api服务并且直接通过rpc调用:

使用JSON的方式执行同一请求:

micro api提供下面类型的http api接口

请看下面的例子

Handler负责持有并管理HTTP请求路由。

默认的handler使用从注册中心获取的端口元数据来决定指向服务的路由,如果路由不匹配,就会回退到使用”rpc” hander。在注册时,可以通过 go-api 来配置路由。

API有如下方法可以配置请求handler:

通过 /rpc 入口可以绕开handler处理器。

API处理器接收任何的HTTP请求,并且向前转发指定格式的RPC请求。

RPC处理器接收json或protobuf格式的HTTP POST请求,然后向前转成RPC请求。

代理Handler其实是内置在服务发现中的反向代理服务。

事件处理器使用go-micro的broker代理接收http请求并把请求作为消息传到消息总线上。

Web处理器是,它是内置在服务发现中的HTTP反向代理服务,支持web socket。

/rpc 端点允许绕过主handler,然后与任何服务直接会话。

示例:

更多信息查看可运行的示例: github.com/micro/examples/api

解析器,Micro使用命名空间与HTTP请求路径来动态路由到具体的服务。

API命名的空间是 go.micro.api 。可以通过指令 --namespace 或者环境变量 MICRO_NAMESPACE= 设置命名空间。

下面说一下解析器是如何使用的:

RPC解析器示例中的RPC服务有名称与方法,分别是 go.micro.api.greeter , Greeter.Hello 。

URL会被解析成以下几部分:

带版本号的API URL也可以很容易定位到具体的服务:

代理解析器只处理服务名,所以处理方案和RPC解析器有点不太一样。

URL会被解析成以下几部分:

Go微服务--常见的微服务框架

近几年诞生了很多微服务框架,比如JAVA的Spring Cloud、Dubbo;Golang的GoKit和GoMicro以及NodeJs的Seneca。几乎每种主流语言都有其对应的微服务框架。

Go在微服务框架中有其独特的优势,至于优势在哪,自行google。

1、GoKit框架

这是一个工具包的集合,可以帮助攻城狮构建强大、可靠和可维护的微服务。提供了用于实现系统监控和弹性模式组件的库,例如日志、跟踪、限流、熔断等。

基于这个框架的应用程序架构由三个主要的部分组成:

传输层:用于网络通信,服务通常使用HTTP或者gRPC等网络传输协议,或者使用NATS等发布订阅系统相互通信。

接口层:是服务器和客户端的基本构建块。每个对外提供的接口方法都会定义为一个Endpoint,一遍在服务器和客户端之间进行网络通信,每个端点使用传输层通过HTTP或gRPC等具体通信模式对外提供服务

服务成:具体的业务逻辑实现

2、GoMicro框架

这是一个基于Go语言实现的插件化RPC微服务框架。提供了服务发现、负载均衡、同步传输、异步通信以及事件驱动等机制,尝试简化分布式系统之间的通信,让开发者更专注于自身业务逻辑的开发。

GoMicro的设计哲学是可插拔的架构理念,提供了可快速构建系统的组件,并且可以根据自身的需求对GoMicro提供的默认实现进行定制。所有插件都可在仓库github.com/micro/go-plugins 中找到。

LINUX 运维工程师都做什么 我网络,想做运维,不知道具体都做什么

1. Linux运维工程师岗位职责

一般从企业入门到中级Linux运维工程师的工作大致有:

□挑选IDC机房及带宽、购买物理服务器。

□购买云服务及CDN服务相关。

□搭建部署压力测试和正式的业务系统运行环境(例如:网站运行环境)。

□负责日常项目或业务代码上线、故障排除、代码回滚等。

□对企业数据进行备份及故障恢复、处理网站运行中的各种故障(例如:硬件故障、软件故障、服务故障、数据损坏及丢失等)。

□对网站的运行状态及故障进行监控、提前解决网站运行的潜在安全问题。

□开发自动化程序或平台提高工作效率。

□根据访问量增加,提前规划和升级网站集群架构,根据公司需求增加业务应用。

□程序发布流程和规范,制定运维工作制度和规范。

□配合开发人员部署及调试产品研发需要的测试环境、代码发布等工作需求。

□公司如果较小可能还会兼职网管、网络工程师、数据库管理员、安全工程师、技术支持等职责。

涉及到的Linux平台上的运维工具有:Linux系统,Linux基础命令,Nginx,Apache,MySQL,PHP,Tomcat,Lvs,Keepalived,SSH,Ansible,Rsync,NFS,Inotify,Sersync,,OpenVPN,NTP,Kickstart/Cobbler,KVM,OpenStack,Docker,K8S,Mongodb,Redis,Memcached,Iptables,SVN,GIT,Jenkins,Shell/Python/Go语言等,除此之外还可能涉及到交换机、路由器、存储、安全、开发等知识。

总的来说:Linux初中级运维工程师更多的是使用工具软件的阶段,在一线城市互联网公司的薪资一般在8000-20000/月。

职业发展方向:Linux运维工程师、系统架构师、数据库工程师、运维开发工程师、系统网络安全工程师、运维经理、运维总监

2.Linux运维架构师岗位职责

运维架构师是运维工程师的高级阶段,并没有明确的岗位界限区分,运维架构师一般来说是除了对运维工程师应用的开源工具熟练掌握之外,更多的是用思想来运维了,即DevOps的落地,各种企业运行过程中的解决方案提出和执行,例如:根据公司的现状可以设计各类运维解决方案的能力:

1、自动化代码上线(SVN/GIT+Jenkins+MVN)解决方案;

2、云计算部署架构及Docker微服务架构方案;

3、服务自动化扩容方案(KVM/OpenStack/Docker+Ansible+Zabbix);

4、10万并发的网站架构、秒杀系统的架构及解决发你个案;

5、多IDC机房互联方案、全网数据备份解决方案、账号统一认证方案;

6、数据库、存储及各重要服务节点的集群和高可用方案。

7、各网络服务的极端优化方案、服务解耦/拆分。

8、运维流程、制度、规范等的建设和推行。

9、沟通能力、培训能力、项目管理、业务需求分析及落地执行力等。

这里仅举几个例子,实际工作中会有更多,运维架构师的工作,其实就是解决企业中的用户访问量不断增大带来的痛点,最终达到高效、优质的为客户提供网站及业务服务。

总的来说:Linux运维架构师更多的是根据企业日益增长的访问量需求,利用若干运维工具组合加上经验思想,形成解决业务需求方案的阶段,当然也不排除对运维工具进行二次开发以及可视化展示运维数据的阶段(开发软件平台),这个阶段涉及的工具会非常多,几乎市面好用的开源工具都在备选之列,在一线城市互联网公司的薪资范围15000-50000/月。

职业方向:高级数据库工程师、运维开发工程师、运维经理、运维总监、技术总监

运维架构师:将多个工具组合,加上思想经验,形成方案,用思想和经验赚钱的阶段。

技术的提升仅是量的积累,思想的提升才是质的飞跃!——老男孩

大数据架构师岗位的主要职责概述

大数据架构师岗位的主要职责概述 篇1

职责:

1、负责大数据平台及BI系统框架设计、规划、技术选型,架构设计并完成系统基础服务的开发;

2、负责海量埋点规则、SDK标准化、埋点数据采集、处理及存储,业务数据分布存储、流式/实时计算等应用层架构搭建及核心代码实现;

3、开发大数据平台的核心代码,项目敏捷开发流程管理,完成系统调试、集成与实施,对每个项目周期技术难题的解决,保证大数据产品的上线运行;

4、负责大数据平台的架构优化,代码评审,并根据业务需求持续优化数据架构,保证产品的可靠性、稳定性;

5、指导开发人员完成数据模型规划建设,分析模型构建及分析呈现,分享技术经验;

6、有效制定各种突发性研发技术故障的应对预案,有清晰的隐患意识;

7、深入研究大数据相关技术和产品,跟进业界先进技术;

任职要求

1、统计学、应用数学或计算机相关专业大学本科以上学历;

2、熟悉互联网移动端埋点方法(点击和浏览等行为埋点),无埋点方案等,有埋点SDK独立开发经验者优选;

3、熟悉Hadoop,MR/MapReduce,Hdfs,Hbase,Redis,Storm,Python,zookeeper,kafka,flinkHadoop,hive,mahout,flume,ElasticSearch,KafkaPython等,具备实际项目设计及开发经验;

4、熟悉数据采集、数据清洗、分析和建模工作相关技术细节及流程

5、熟悉Liunx/Unix操作系统,能熟练使用shell/perl等脚本语言,熟练掌握java/python/go/C++中一种或多种编程语言

6、具备一定的算法能力,了解机器学习/深度学习算法工具使用,有主流大数据计算组件开发和使用经验者优先

7、熟悉大数据可视化工具Tableau/echarts

8、具有较强的执行力,高度的责任感、很强的学习、沟通能力,能够在高压下高效工作;

大数据架构师岗位的主要职责概述 篇2

职责:

根据大数据业务需求,设计大数据方案及架构,实现相关功能;

搭建和维护大数据集群,保证集群规模持续、稳定、高效平稳运行;

负责大数据业务的设计和指导具体开发工作;

负责公司产品研发过程中的数据及存储设计;

针对数据分析工作,能够完成和指导负责业务数据建模。

职位要求:

计算机、自动化或相关专业(如统计学、数学)本科以上学历,3年以上大数据处理相关工作经验;

精通大数据主流框架(如Hadoop、hive、Spark等);

熟悉MySQL、NoSQL(MongoDB、Redis)等主流数据库,以及rabbit MQ等队列技术;

熟悉hadoop/spark生态的原理、特性且有实战开发经验;

熟悉常用的数据挖掘算法优先。

大数据架构师岗位的主要职责概述 篇3

职责:

1、大数据平台架构规划与设计;

2、负责大数据平台技术框架的选型与技术难点攻关;

3、能够独立进行行业大数据应用的整体技术框架、业务框架和系统架构设计和调优等工作,根据系统的业务需求,能够指导开发团队完成实施工作;

4、负责数据基础架构和数据处理体系的升级和优化,不断提升系统的稳定性和效率,为相关的业务提供大数据底层平台的支持和保证;

5、培养和建立大数据团队,对团队进行技术指导。

任职要求:

1、计算机相关专业的背景专业一类院校毕业本科、硕士学位,8年(硕士5年)以上工作经验(至少拥有3年以上大数据项目或产品架构经验);

2、精通Java,J2EE相关技术,精通常见开源框架的架构,精通关系数据库系统(Oracle MySQL等)和noSQL数据存储系统的原理和架构;

3、精通SQL和Mapreduce、Spark处理方法;

4、精通大数据系统架构,熟悉业界数据仓库建模方法及新的建模方法的发展,有DW,BI架构体系的专项建设经验;

5、对大数据体系有深入认识,熟悉Kafka、Hadoop、Hive、HBase、Spark、Storm、greenplum、ES、Redis等大数据技术,并能设计相关数据模型;

6、很强的学习、分析和解决问题能力,可以迅速掌握业务逻辑并转化为技术方案,能独立撰写项目解决方案、项目技术文档;

7、具有较强的内外沟通能力,良好的团队意识和协作精神;

8、机器学习技术、数据挖掘、人工智能经验丰富者优先考虑;

9、具有能源电力行业工作经验者优先。

大数据架构师岗位的主要职责概述 篇4

职责:

1.参与公司数据平台系统规划和架构工作,主导系统的架构设计和项目实施,确保项目质量和关键性能指标达成;

2.统筹和推进制造工厂内部数据系统的构建,搭建不同来源数据之间的逻辑关系,能够为公司运营诊断、运营效率提升提供数据支持;

3.负责数据系统需求对接、各信息化系统数据对接、软件供应商管理工作

5.根据现状制定总体的数据治理方案及数据体系建立,包括数据采集、接入、分类、开发标准和规范,制定全链路数据治理方案;深入挖掘公司数据业务,超强的数据业务感知力,挖掘数据价值,推动数据变现场景的落地,为决策及业务赋能;

6.定义不同的数据应用场景,推动公司的数据可视化工作,提升公司数据分析效率和数据价值转化。

任职要求:

1.本科以上学历,8年以上软件行业从业经验,5年以上大数据架构设计经验,熟悉BI平台、大数据系统相关技术架构及技术标准;

2.熟悉数据仓库、熟悉数据集市,了解数据挖掘、数据抽取、数据清洗、数据建模相关技术;

3.熟悉大数据相关技术:Hadoop、Hive、Hbase、Storm、Flink、Spark、Kafka、RabbitMQ;

4.熟悉制造企业信息化系统及相关数据库技术;

5.具备大数据平台、计算存储平台、可视化开发平台经验,具有制造企业大数据系统项目开发或实施经验优先;

6.对数据敏感,具备优秀的业务需求分析和报告展示能力,具备制造企业数据分析和数据洞察、大数据系统的架构设计能力,了解主流的报表工具或新兴的前端报表工具;

7.有较强的沟通和组织协调能力,具备结果导向思维,有相关项目管理经验优先。

大数据架构师岗位的.主要职责概述 篇5

职责:

1.负责产品级业务系统架构(如业务数据对象识别,数据实体、数据属性分析,数据标准、端到端数据流等)的设计与优化。协助推动跨领域重大数据问题的分析、定位、解决方案设计,从架构设计上保障系统高性能、高可用性、高安全性、高时效性、分布式扩展性,并对系统质量负责。

2.负责云数据平台的架构设计和数据处理体系的优化,推动云数据平台建设和持续升级,并制定云数据平台调用约束和规范。

3.结合行业应用的需求负责数据流各环节上的方案选型,主导云数据平台建设,参与核心代码编写、审查;数据的统计逻辑回归算法、实时交互分析;数据可视化方案等等的选型、部署、集成融合等等。

4.对云数据平台的关注业内技术动态,持续推动平台技术架构升级,以满足公司不同阶段的数据需求。

任职要求:

1.熟悉云计算基础平台,包括Linux(Ubuntu/CentOS)和KVM、OpenStack/K8S等基础环境,熟悉控制、计算、存储和网络;

2.掌握大型分布式系统的技术栈,如:CDN、负载均衡、服务化/异步化、分布式缓存、NoSQL、数据库垂直及水平扩容;熟悉大数据应用端到端的相关高性能产品。

3.精通Java,Python,Shell编程语言,精通SQL、NoSQL等数据库增删改查的操作优化;

4.PB级别实战数据平台和生产环境的实施、开发和管理经验;

5.熟悉Docker等容器的编排封装,熟悉微服务的开发和日常调度;

6.计算机、软件、电子信息及通信等相关专业本科以上学历,5年以上软件工程开发经验,2年以上大数据架构师工作经验。

大数据架构师岗位的主要职责概述 篇6

职责描述:

1、负责集团大数据资产库的技术架构、核心设计方案,并推动落地;

2、带领大数据技术团队实现各项数据接入、数据挖掘分析及数据可视化;

3、新技术预研,解决团队技术难题。

任职要求:

1、在技术领域有5年以上相关经验,3年以上的架构设计或产品经理经验;

2、具有2年以上大数据产品和数据分析相关项目经验;

3、精通大数据分布式系统(hadoop、spark、hive等)的架构原理、技术设计;精通linux系统;精通一门主流编程语言,java优先。

大数据架构师岗位的主要职责概述 篇7

岗位职责:

1、基于公司大数据基础和数据资产积累,负责大数据应用整体技术架构的设计、优化,建设大数据能力开放平台;负责大数据应用产品的架构设计、技术把控工作。

2、负责制定大数据应用系统的数据安全管控体系和数据使用规范。

3、作为大数据技术方案到产品实现的技术负责人,负责关键技术点攻坚工作,负责内部技术推广、培训及知识转移工作。

4、负责大数据系统研发项目任务规划、整体进度、风险把控,有效协同团队成员并组织跨团队技术协作,保证项目质量与进度。

5、负责提升产品技术团队的技术影响力,针对新人、普通开发人员进行有效辅导,帮助其快速成长。

任职资格:

1、计算机、数学或相关专业本科以上学历,5—20xx年工作经验,具有大型系统的技术架构应用架构数据架构相关的实践工作经验。

2、有分布式系统分析及架构设计经验,熟悉基于计算集群的软件系统架构和实施经验。

3、掌握Hadoop/Spark/Storm生态圈的主流技术及产品,深入了解Hadoop/Spark/Storm生态圈产品的工作原理及应用场景。

4、掌握Mysql/Oracle等常用关系型数据库,能够对SQL进行优化。

5、熟悉分布式系统基础设施中常用的技术,如缓存(Varnish、Memcache、Redis)、消息中间件(Rabbit MQ、Active MQ、Kafka、NSQ)等;有实践经验者优先。

6、熟悉Linux,Java基础扎实,至少3—5年以上Java应用开发经验,熟悉常用的设计模式和开源框架。

大数据架构师岗位的主要职责概述 篇8

岗位职责:

1、负责公司大数据平台架构的技术选型和技术难点攻关工作;

2、依据行业数据现状和客户需求,完成行业大数据的特定技术方案设计与撰写;

3、负责研究跟进大数据架构领域新兴技术并在公司内部进行分享;

4、参与公司大数据项目的技术交流、解决方案定制以及项目的招投标工作;

5、参与公司大数据项目前期的架构设计工作;

任职要求:

1、计算机及相关专业本科以上,5年以上数据类项目(数据仓库、商务智能)实施经验,至少2年以上大数据架构设计和开发经验,至少主导过一个大数据平台项目架构设计;

2、精通大数据生态圈的技术,包括但不限于MapReduce、Spark、Hadoop、Kafka、Mongodb、Redis、Flume、Storm、Hbase、Hive,具备数据统计查询性能优化能力。熟悉星环大数据产品线及有过产品项目实施经验者优先;

3、优秀的方案撰写能力,思路清晰,逻辑思维强,能够根据业务需求设计合理的解决方案;

4、精通ORACLE、DB2、mySql等主流关系型数据库,熟悉数据仓库建设思路和数据分层架构思想;

5。熟练掌握java、R、python等1—2门数据挖掘开发语言;

6。熟悉云服务平台及微服务相关架构思想和技术路线,熟悉阿里云或腾讯云产品者优先;

7、有烟草或制造行业大数据解决方案售前经验者优先;

8、能适应售前支持和项目实施需要的短期出差;

大数据架构师岗位的主要职责概述 篇9

岗位职责:

1、负责相关开源系统/组件的性能、稳定性、可靠性等方面的深度优化;

2、负责解决项目上线后生产环境的各种实际问题,保障大数据平台在生产上的安全、平稳运行;

3、推动优化跨部门的业务流程,参与业务部门的技术方案设计、评审、指导;

4、负责技术团队人员培训、人员成长指导。

5、应项目要求本月办公地址在锦江区金石路316号新希望中鼎国际办公,月底项目结束后在总部公司办公

任职要求:

1、熟悉linux、JVM底层原理,能作为技术担当,解决核心技术问题;

2、3年以上大数据平台项目架构或开发经验,对大数据生态技术体系有全面了解,如Yarn、Spark、HBase、Hive、Elasticsearch、Kafka、PrestoDB、Phoenix等;

3、掌握git、maven、gradle、junit等工具和实践,注重文档管理、注重工程规范优先;

4、熟悉Java后台开发体系,具备微服务架构的项目实施经验,有Dubbo/Spring cloud微服务架构设计经验优先;

5、性格开朗、善于沟通,有极强的技术敏感性和自我驱动学习能力,注重团队意识。

大数据架构师岗位的主要职责概述 篇10

职责描述:

1、负责大数据平台框架的规划设计、搭建、优化和运维;

2、负责架构持续优化及系统关键模块的设计开发,协助团队解决开发过程中的技术难题;

3、负责大数据相关新技术的调研,关注大数据技术发展趋势、研究开源技术、将新技术应用到大数据平台,推动数据平台发展;

4、负责数据平台开发规范制定,数据建模及核心框架开发。

任职要求:

1、计算机、数学等专业本科及以上学历;

2、具有5年及以上大数据相关工作经验;

3、具有扎实的大数据和数据仓库的理论功底,负责过大数据平台或数据仓库设计;

4、基于hadoop的大数据体系有深入认识,具备相关产品(hadoop、hive、hbase、spark、storm、 flume、kafka、es等)项目应用研发经验,有hadoop集群搭建和管理经验;

5、熟悉传统数据仓库数据建模,etl架构和开发流程,使用过kettle、talend、informatic等至少一种工具;

6、自驱力强、优秀的团队意识和沟通能力,对新技术有好奇心,学习能力和主动性强,有钻研精神,充满激情,乐于接受挑战;

许式伟的个人简介

许式伟,七牛云存储CEO。ECUG社区发起人,是国内Go语言实践圈子公认的Go语言专家,并著有《Go语言编程》。超过10年互联网从业经验,曾在金山、盛大事技术研究方面的工作,是WPS2005的首席架构师。2011年创办七牛云存储,成功打造了全新的公有云存储服务。

微服务架构之服务注册与发现(一)

一、服务注册中心的由来

假如没有服务注册中心,我们会干些什么事情呢?

在传统行业的项目架构中以下的方案最为常见了:

这种架构开发、部署都是最简单的,一般适用于中小企业访问量并不是太多的情况下,各个系统服务一台机器就搞定了。系统之间的调用也是拿到对方的IP+PORT直接连接。

接下来可能因为应用B开始访问量大了,单台机器已经不能满足我们的需求,于是一些反向代理工具应运而出,其中比较常见的有Apache、Nigix,架构演变为:

相比之前的应用B的单台机器访问,这种nginx代理的方式减轻了服务器的压力,但是可能会出现Nginx挂了,那么整个服务也不可用,于是又来了这么一套架构:

这样看方案算是完美了吧。然后事情并不是想象的那么一帆风顺,这还只是应用A调用一个应用B,如果应用A调用的可能是应用B、C、D、E...,这种完全就不知道他后面到底还想干嘛,这种架构看似可以,但是绝对会累死运维的(nginx的配置将会非常混乱,直接导致运维不干了)。

服务注册中心干些什么事情呢?

上面提到的那种靠人力(主要是运维干的事情)比较繁琐,还不好维护,有这么几点不方便:应用服务的地址变了、双十一搞活动服务器新增等等。那么我们可以有这么的一种架构:

服务注册中心主要是维护各个应用服务的ip+port列表,并保持与各应用服务的通讯,在一定时间间隔内进行心跳检测,如果心跳不能到达则对服务IP列表进行剔除,并同时通知给其它应用服务进行更新。同样要是有新增的服务进来,应用服务会向注册中心进行注册,服务注册中心将通知给其它应用进行更新。每个应用都有需要调用对应应用服务的地址列表,这样在进行调用时只要处理客户负载杂均衡即可。

二、微服务注册中心

1.Zookeeper

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

上面的话直接摘抄百度百科的内容,国内很多公司做分布式开发最初的选型大部分都是采用dubbo框架。dubbo框架注册中心主要使用zookeeper。zookeeper服务端与客户端的底层通讯为netty。zookeeper采用CAP理论中的CP,一般集群部署最少需要3台机器。

2.Euraka

先来看一下euraka的架构图:

Register:服务注册

当Eureka客户端向Eureka Server注册时,它提供自身的元数据,比如IP地址、端口,运行状况指示符URL,主页等。

Renew:服务续约

Eureka客户会每隔30秒发送一次心跳来续约。 通过续约来告知Eureka Server该Eureka客户仍然存在,没有出现问题。 正常情况下,如果Eureka Server在90秒没有收到Eureka客户的续约,它会将实例从其注册表中删除。 建议不要更改续约间隔。

Fetch Registries:获取注册列表信息

Eureka客户端从服务器获取注册表信息,并将其缓存在本地。客户端会使用该信息查找其他服务,从而进行远程调用。该注册列表信息定期(每30秒钟)更新一次。每次返回注册列表信息可能与Eureka客户端的缓存信息不同, Eureka客户端自动处理。如果由于某种原因导致注册列表信息不能及时匹配,Eureka客户端则会重新获取整个注册表信息。 Eureka服务器缓存注册列表信息,整个注册表以及每个应用程序的信息进行了压缩,压缩内容和没有压缩的内容完全相同。Eureka客户端和Eureka 服务器可以使用JSON / XML格式进行通讯。在默认的情况下Eureka客户端使用压缩JSON格式来获取注册列表的信息。

Cancel:服务下线

Eureka客户端在程序关闭时向Eureka服务器发送取消请求。 发送请求后,该客户端实例信息将从服务器的实例注册表中删除。该下线请求不会自动完成,它需要调用以下内容:

DiscoveryManager.getInstance().shutdownComponent();

Eviction 服务剔除

在默认的情况下,当Eureka客户端连续90秒没有向Eureka服务器发送服务续约,即心跳,Eureka服务器会将该服务实例从服务注册列表删除,即服务剔除。

自我保护机制:

既然Eureka Server会定时剔除超时没有续约的服务,那就有可能出现一种场景,网络一段时间内发生了 异常,所有的服务都没能够进行续约,Eureka Server就把所有的服务都剔除了,这样显然不太合理。所以,就有了 自我保护机制,当短时间内,统计续约失败的比例,如果达到一定阈值,则会触发自我保护的机制,在该机制下, Eureka Server不会剔除任何的微服务,等到正常后,再退出自我保护机制。自我保护开关(eureka.server.enableself-preservation: false)

3.Consul

consul推荐的架构图:

Consul不像Euraka的部署那么简单,他是go语言开发的,需要运维单独部署,有提供java的客户端连接,采用的是CAP的CP。

4.Nacos

Euraka是Spring Cloud Netflix早期版本中推荐使用的,后来euraka1.0版本不再维护,euraka2.0已经闭源,导致很多新项目基于Spring Cloud Netflix 开发的选型变迁为Consul.

Nacos是阿里开源的服务注册中心,它可以与spring cloud aliaba集成使用。

Nacos的官方介绍:

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您实现动态服务发现、服务配置管理、服务及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构(例如微服务范式、云原生范式)的服务基础设施。

Nacos 地图

Nacos 生态图

如 Nacos 全景图所示,Nacos 无缝支持一些主流的开源生态,例如

Spring Cloud

Apache Dubbo and Dubbo Mesh TODO

Kubernetes and CNCF TODO

三、服务注册与发现技术选型

以下是来自网上的一个分享:

除了上述的几种以外,笔者更推荐使用Nacos作为服务注册中心。

推荐理由:

Nacos服务注册表结构Mapnamespace, Mapgroup::serviceName, Service采用多层次Map结构,控制的颗粒度更细,支持金丝雀模式发布,心跳同步机制也更快速,服务更新更及时。


网页题目:go语言微服务架构师 go 微服务架构
本文来源:http://azwzsj.com/article/doooipi.html