基于ServiceComb(CSE)进行微服务开发系列(一)
为什么要用微服务架构?请参阅以下两篇文章:
模式:单体架构 https://microservices.io/patterns/cn/monolithic.html
模式:微服务架构 https://microservices.io/patterns/cn/microservices.html
ServiceComb是华为云于2017年6月开源的微服务框架,并于2017年12月正式进入Apache软件基金会孵化。其包括一站式的服务注册、服务治理、动态配置功能,具备服务化契约增强、多语言SDK支持、多通信协议支持等优势特性, 并提供SAGA数据最终一致性方案解决微服务架构数据一致性难题。ServiceComb 兼容Spring Cloud等业界流行微服务框架,互通业界生态。ServiceComb的项目发起人和负责人姜宁为华为开源能力中心技术专家及华为PaaS领域开源专家,拥有多年参与Apache中间件项目的经验并指导多个Apache孵化项目,熟悉开源社区开发流程,对微服务及SOA均有较深入研究。
ServiceComb源自华为云企业级微服务引擎CSE,并应用在华为云微服务云应用管理平台ServiceStage之上。ServiceComb作为华为微服务引擎CSE核心,已在华为流程IT、各产品线云化、消费者云等众多重大项目上成功稳定商用,并帮助包括软通动力、中软国际、绿城盟拓、南京奇蛙智能科技有限公司等企业完成应用微服务改造,加速其业务上云并帮助实现高效的运维管理。
ServiceComb官网:http://servicecomb.apache.org/cn/
注意,ServiceComb与华为公有云上的CSE同源,公有云上的CSE相当于ServiceCom的商业增强版。会用ServiceComb,基本就掌握了CSE服务的核心用法,为业务迁移上云打下了基础。
本文将在centos 7.5 64位服务器环境下完成一系列实验,包括以下内容:
1)跑起Service Center和frontend。Service Center是所有微服务的注册中心,微服务跑起来后都要注册到ServiceCenter;frontend是ServiceCenter的web管理端,可以浏览、测试各个微服务。
2)基于 spring boot开发一个微服务,跑起两个实例,并注册到Service Center,以负载均衡的方式对外提供服务
3)使用mesher作为代理,调用ServiceCenter中已注册的微服务。PHP等语言可以将mesher作为HTTP_PROXY去访问ServiceCenter中的微服务。
本次实验完成后的总体架构如下:
一、 跑起ServiceCenter和frontend
到 http://servicecomb.apache.org/cn/release/ 下载ServiceCenter,最新稳定版是1.0.0,下载得到 apache-servicecomb-incubating-service-center-1.0.0-linux-amd64.tar.gz,解压后目录结构如下:
ServiceCenter是使用golang开发的,会编译成单一的可执行文件,非常方便部署。
运行 ./start-service-center.sh,ServiceCenter将在后台运行。
运行 ./start-frontend.sh,frontend将在后台运行。
稍后,浏览器内访问 http://127.0.0.1:30103,即可看到frontend的界面。如下图所示:
二、 基于 spring boot开发微服务
浏览器访问 http://start.servicecomb.io/,在线生成一个 spring boot maven项目模板。如下图:
点击 create project,下载得到项目模板。解压后,进入pom.xml所在的目录,执行 mvn package,稍后多出了target目录,target目录下有一个bin目录,编译后的完整jar包就在这里,名为 Cellphone-0.0.1-SNAPSHOT-exec.jar。
三、 跑起CellphoneService的两个实例
新建两个目录,命名分别为instance-1、instance-2,将Cellphone-0.0.1-SNAPSHOT-exec.jar复制到这两个文件夹里。
将src\main\resources 目录下的 microservice.yaml 复制到 instance-1和instance-2文件夹,并修改这两个yaml文件中的APPLICATION_ID为default。
修改 instance-2文件夹下的microservice.yaml,将0.0.0.0:9080修改为0.0.0.0:9081
进入instance-1文件夹,执行 java –jar Cellphone-0.0.1-SNAPSHOT-exec.jar
进入instance-2文件夹,执行 java –jar Cellphone-0.0.1-SNAPSHOT-exec.jar
稍后,就能在ServiceCenter frontend中看到跑起来的CellphoneService的两个实例。如下图所示:
四、 跑起mesher服务
到 https://github.com/go-mesh/mesher/releases 下载mesher编译好的linux版本,如图所示:
解压后目录结构如下图所示:
Mesher也是使用golang开发的,编译完成后为单一可执行文件,部署非常方便。
conf目录下有好几个yaml文件,因为是入门阶段,我们删掉一些,只保留以下几个:
编辑 conf/microservice.yaml文件,将 name改为 MesherClient,如下图所示:
在mesher的根目录执行 ./mesher,mesher就跑起来了。此时,在frontend界面可以看到完整的service列表。如下图所示:
五、 使用PHP调用CellphoneService
PHP使用curl模块调用servicecomb中注册的服务。并且要将mesher的rest地址127.0.0.1:30101作为http_proxy地址,通过mesher代理访问servicecomb中注册的服务,mesher帮我们实现了负载均衡等功能。
PHP代码如下:
注意,CellphoneService为要访问的服务名称(而不是服务实例的主机名或IP地址),后面无需加端口号,mesher会根据这个服务名称到ServiceCenter中查找所有的instance,并记录这些instance对外提供服务的IP地址和端口号。
执行PHP脚本,返回CellphoneService的响应结果,如下图所示:
六、 小结
至此,已完成了一些列实验,我们使用JAVA开发了一个微服务,并使用PHP作为客户端进行了服务调用。
当然,完全可以脱离ServiceComb来实现跨语言的相互调用(因为是REST接口),但ServiceComb提供了负载均衡等高级特性,这些生产环境必须的需求就不用我们操心了,我们只聚焦于解决业务问题即可。
华为公有云提供了ServiceComb的商业版,即“微服务引擎 CSE”(https://www.huaweicloud.com/product/cse.html),可以将CSE理解为完全托管的ServiceComb,省却了大量底层基础运维的负担。
- 点赞
- 收藏
- 关注作者
评论(0)