基于ServiceComb(CSE)进行微服务开发系列(一)

举报
SK 发表于 2018/12/01 12:08:23 2018/12/01
【摘要】 本文将在centos 7.5 64位服务器环境下完成一系列实验,包括以下内容:1)跑起Service Center和frontend;2)基于 spring boot开发一个微服务,跑起两个实例;3)使用PHP开发客户端调用java开发的微服务。

为什么要用微服务架构?请参阅以下两篇文章:

模式:单体架构 https://microservices.io/patterns/cn/monolithic.html

模式:微服务架构 https://microservices.io/patterns/cn/microservices.html

 

ServiceComb是华为云于20176月开源的微服务框架,并于201712月正式进入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 CenterfrontendService Center是所有微服务的注册中心,微服务跑起来后都要注册到ServiceCenterfrontendServiceCenterweb管理端,可以浏览、测试各个微服务。

2)基于 spring boot开发一个微服务,跑起两个实例,并注册到Service Center,以负载均衡的方式对外提供服务

3)使用mesher作为代理,调用ServiceCenter中已注册的微服务。PHP等语言可以将mesher作为HTTP_PROXY去访问ServiceCenter中的微服务。

 

本次实验完成后的总体架构如下:

 SNAG-2018-12-1-018.jpg

  


一、            跑起ServiceCenterfrontend

 

http://servicecomb.apache.org/cn/release/ 下载ServiceCenter,最新稳定版是1.0.0,下载得到 apache-servicecomb-incubating-service-center-1.0.0-linux-amd64.tar.gz,解压后目录结构如下:

SNAG-2018-12-1-019.jpg

 

ServiceCenter是使用golang开发的,会编译成单一的可执行文件,非常方便部署。

 

运行 ./start-service-center.shServiceCenter将在后台运行。

运行 ./start-frontend.shfrontend将在后台运行。

 

稍后,浏览器内访问 http://127.0.0.1:30103,即可看到frontend的界面。如下图所示:

SNAG-2018-12-1-020.jpg

 

二、            基于 spring boot开发微服务

 

浏览器访问 http://start.servicecomb.io/,在线生成一个 spring boot maven项目模板。如下图:

SNAG-2018-12-1-021.jpg

 

点击 create project,下载得到项目模板。解压后,进入pom.xml所在的目录,执行 mvn package,稍后多出了target目录,target目录下有一个bin目录,编译后的完整jar包就在这里,名为 Cellphone-0.0.1-SNAPSHOT-exec.jar

 

三、            跑起CellphoneService的两个实例

 

新建两个目录,命名分别为instance-1instance-2,将Cellphone-0.0.1-SNAPSHOT-exec.jar复制到这两个文件夹里。

 

src\main\resources 目录下的 microservice.yaml 复制到 instance-1instance-2文件夹,并修改这两个yaml文件中的APPLICATION_IDdefault

 

修改 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的两个实例。如下图所示:

SNAG-2018-12-1-022.jpg

 

四、            跑起mesher服务

 

https://github.com/go-mesh/mesher/releases 下载mesher编译好的linux版本,如图所示:

SNAG-2018-12-1-023.jpg

 

解压后目录结构如下图所示:

SNAG-2018-12-1-024.jpg

 

Mesher也是使用golang开发的,编译完成后为单一可执行文件,部署非常方便。

 

conf目录下有好几个yaml文件,因为是入门阶段,我们删掉一些,只保留以下几个:

SNAG-2018-12-1-025.jpg

 

编辑 conf/microservice.yaml文件,将 name改为 MesherClient,如下图所示:

SNAG-2018-12-1-026.jpg

 

mesher的根目录执行 ./meshermesher就跑起来了。此时,在frontend界面可以看到完整的service列表。如下图所示:

SNAG-2018-12-1-027.jpg

 

五、            使用PHP调用CellphoneService

 

PHP使用curl模块调用servicecomb中注册的服务。并且要将mesherrest地址127.0.0.1:30101作为http_proxy地址,通过mesher代理访问servicecomb中注册的服务,mesher帮我们实现了负载均衡等功能。

 

PHP代码如下:

SNAG-2018-12-1-028.jpg

 

注意,CellphoneService为要访问的服务名称(而不是服务实例的主机名或IP地址),后面无需加端口号,mesher会根据这个服务名称到ServiceCenter中查找所有的instance,并记录这些instance对外提供服务的IP地址和端口号。

 

执行PHP脚本,返回CellphoneService的响应结果,如下图所示:

SNAG-2018-12-1-029.jpg

 

六、            小结

 

至此,已完成了一些列实验,我们使用JAVA开发了一个微服务,并使用PHP作为客户端进行了服务调用。

 

当然,完全可以脱离ServiceComb来实现跨语言的相互调用(因为是REST接口),但ServiceComb提供了负载均衡等高级特性,这些生产环境必须的需求就不用我们操心了,我们只聚焦于解决业务问题即可。

 

华为公有云提供了ServiceComb的商业版,即“微服务引擎 CSE”(https://www.huaweicloud.com/product/cse.html),可以将CSE理解为完全托管的ServiceComb,省却了大量底层基础运维的负担。

 

 


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。