华为 ServiceComb框架

华为ServiceComb是一款Apache开源的微服务框架,源于华为云的CSE。它提供了多语言、多通信协议的支持,强调开放性和标准。ServiceComb与SpringCloud相比在微服务开发上有优势,提供API-first开发模式,支持RESTful和RPC方式。本文详细介绍了ServiceComb的安装、服务注册中心、开发环境配置、微服务解决方案和案例,展示了如何快速开发REST和RPC方式的微服务,并探讨了服务治理策略如负载均衡、限流和熔断机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

华为 ServiceComb框架

一、ServiceComb 概述

1.背景介绍
ServiceComb 作为Apache 开源组织下的一款微服务框架,其前身为华为云的 微服务引擎 CSE (Cloud Service Engine) 云服务。它意味着国内一款微服务框架在华为和Apache 组织的共同努力下, 随着微服务市场的火爆,一定会让越来越多的开发者所喜欢。
2.首要原则
全球首款进入Apache 的开源微服务项目,中立、开放、标准、无商业Lock-in
开源与商业代码同源,具备零成本平滑迁移商用的能力,社区长足发展有保障
3.技术方案
解决方案级,多语言、多通信协议、标准服务契约、事务最终一致性开源开放,拥抱SpringBoot、SpringCloud、ServiceMesh 等主流生态低门槛准入,业务侵入度低,架构松耦合

4.官方网站介绍
华为将 ServiceComb 贡献给了 Apache 基金组织后,我们就可以通过 Apache 的官方网站提供的资料来学习ServiceComb,下面是官网地址:
英文:http://servicecomb.incubator.apache.org/ 中文:http://servicecomb.incubator.apache.org/cn/

二、ServiceComb 与 SpringCloud 的比较

我们可以从语言框架,编程模型,通信协议,服务治理,服务访问,分布式事务等方面进行比较, 得出结果如下:
在这里插入图片描述
通过上图的对比,我们可以得出结论就是 ServiceComb 在微服务开发上更胜一筹。我们有理由
相信 ServiceComb 将会在微服务开发领域成为国人的骄傲。

**

三、ServiceComb 的开放性设计思想**

1.编程模型和通信模型分离,不同的编程模型可以灵活组合不同的通信模型。应用开发者在开发阶 段只关注接口开发,部署阶段灵活切换通信方式;支持 legacy 系统的切换,legacy 系统只需要修改服务发布的配置文件(或者annotation),而不需要修改代码。
现阶段支持SpringMVC、JAX-RS 和透明RPC 三种开发方式。
2.内建 API-first 支持。通过契约规范化微服务开发,实现跨语言的通信,并支持配套的软件工具链
(契约生成代码、代码生成契约等)开发,构建完整的开发生态。
3.定义了常用的微服务运行模型,将微服务从发现到交互过程中的各种容错手段都封装起来。该运 行模型支持自定义和扩展。
在这里插入图片描述

四、ServiceComb 微服务解决方案**

在这里插入图片描述

五、安装 ServiceComb 开发环境

应用开发环境所需安装的工具包括JDK、Maven、Eclipse 和 IDEA 。

六、服务注册中心 CSE 介绍

1.服务注册中心基本介绍

现在我们介绍如何在开发者本地进行消费者/提供者应用的开发调试。开发服务提供者和消费提供者 均需要连接到在远程的服务中心,为了本地微服务的开发和调试:
启动本地服务中心;
服务中心是微服务框架中的重要组件,用于服务元数据以及服务实例元数据的管理和处理注册、发 现。服务中心与微服务提供/消费者的逻辑关系下图所示:
在这里插入图片描述
2.启动本地服务中心

  1. 下 载 [ 服 务 注 册 中 心 可 执 行 文 件 压 缩 包 ] (http://apache.org/dyn/closer.cgi/incubator/servicecomb/incubator-servicecomb-service-center/1.0.0-m1/ap ache-servicecomb-incubating-service-center-1.0.0-m1-windows-amd64.tar.gz) 2. 解压缩到当前文件夹 3. 进入解压缩后的目录,然后双击运行start-service-center.bat文件
    注意:Window 和Linux 版本均只支持 64 位系统。 {: .notice–warning}
    以Docker 的方式运行
docker pull servicecomb/service-center
docker run -d -p 30100:30100 servicecomb/service-center:latest

下载后的 CSE 服务注册中心,并打开目录结构如下:
在这里插入图片描述
打开 conf/app.conf 文件后,可以找到 CSE 基本配置如下: 服务端配置:

# sever options ###################################################################
# if you want to listen at ipv6 address, then set the httpaddr value like: # httpaddr = 2400:A480:AAAA:200::159	(global scope)
# httpaddr = fe80::f816:3eff:fe17:c38b%eth0 (link-local scope) httpaddr = 127.0.0.1
httpport = 30100


read_header_timeout = 60s read_timeout = 60s idle_timeout = 60s write_timeout = 60s max_header_bytes = 32768 # 32K max_body_bytes = 2097152 # 2M

enable_pprof = 0

前端配置:

# Frontend Configurations ###################################################################
frontend_host_ip = 127.0.0.1
frontend_host_port = 30103

2 .启动本地服务中心后,在服务提供/消费者的 microservice.yaml 文件中配置 ServerCenter 的地址和端口,示例代码:

servicecomb: service: registry: address:
http://127.0.0.1:30100
#服务中心地址及端口

3.开发服务提供/消费者,启动微服务进行本地测试。
通过设置环境信息方便本地调试
通过 microservice.yaml 配置文件来指定

service_description:
environment: development

七、使用官方提供的脚手架快速开发 ServiceComb

为了能够使开发者可以快速构建 ServiceComb 应用程序,它同样也为我们提供了一套脚手架,这样
能够方便学习者及应用开发者快速入门,同时极大的提高了效率。
1.访问快速开发引导页:
http://start.servicecomb.io/
页面如下:
在这里插入图片描述
后面我们就可以填写工程相关内容,最后就可以生成代码了。
下载后的工程
在这里插入图片描述
解压工程,导入到 Idea 工具中。

八、ServiceComb 服务的线程模型与通信协议

ServiceComb 实现了两种网络通道,包括 REST 和 Highway,均支持 TLS 加密传输。其中,REST 网
络通道将服务以标准 RESTful 形式发布,调用端兼容直接使用 http client 使用标准 RESTful 形式进行
调用。
1.线程模型
我们一起来了解 serviceComb 微服务的完整线程模型, IO 线程和业务线程之间的关系。
servicecComb 微服务的完整线程模型如下图所示:
在这里插入图片描述
2.通信协议
通过上面的线程模型的分析,我们发现最终业务线程和服务端线程通信的关键就在于他们的网络连
接和网络通信的过程,所以我们现在一起来学习一下 ServiceComb 中常用的通信协议有哪些?
在这里插入图片描述
我们通过下面的图可以看出有三种协议方式:
第一种 :HighWay 方式,这种方式其实就是我们常说的 RPC 方式。
第二种:Vertx REST 方式,这种方式也可以实现 WEB 开发,但我们一起用的少。
第三种:Servlet REST 方式,这种方式是我们现在用的最多的一种方式。

九、开发 RESTFUL 方式微服务入门程序

首先我们以 rest 方式来开发 servicecomb 的入门程序,通过该程序我们能够掌握 servicecomb 微
服务框架的 restful 方式开发基本步骤。
该程序的基本技术架构:springboot+servicecomb
1.服务程序基本结构
我们所构建的 servicecomb 入门程序的基本结构,如下图所示:
在这里插入图片描述
工程之间的结构关系,如下图所示:
在这里插入图片描述
2.父工程 servicecombrest 坐标引入
在父工程中 servicecombrest 的pom.xml 文件中添加相关的坐标。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>cn.itcast.servicecomb</groupId>
 <artifactId>servicecomb-rest</artifactId>
 <packaging>pom</packaging>
 <version>1.0-SNAPSHOT</version>
 <modules>
 <module>serviceprovider</module>
 <module>serviceconsumer</module>
 <module>service-inerface</module>
 </modules>
 <properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 <java.version>1.8</java.version>
 <fastjson.version>1.2.47</fastjson.version>
 </properties>
 <parent>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-parent</artifactId>
 <version>1.5.12.RELEASE</version>
 <relativePath/> <!-- lookup parent from repository 
<version>1.5.12.RELEASE</version>-->
 </parent>
 <dependencyManagement>
 <dependencies>
 <dependency>
 <groupId>org.apache.servicecomb</groupId>
 <artifactId>java-chassis-dependencies</artifactId>
 <version>1.0.0-m2</version>
 <type>pom</type>
 <scope>import</scope>
 </dependency>
 </dependencies>
 </dependencyManagement>
 <build>
 <plugins>
 <plugin>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-maven-plugin</artifactId>
 </plugin>
 </plugins>
 </build>
</project>

3.子模块-服务接口 serviceinterface
打开 serviceinterface 子模块,并进入 src/main/java 目录下,创建 RestService 类
具体代码如下所示:

package cn.itcast.service;
public interface RestService {
   
 public String restHello(String name);
}

4.子模块-服务提供者 serviceprovider
打开模块后,模块结构图如下所示:
在这里插入图片描述
进入子模块 serviceprovider,打开 pom.xml 文件,添加如下坐标:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <parent>
 <artifactId>servicecomb-rest</artifactId>
 <groupId>cn.itcast.servicecomb</groupId>
 <version>1.0-SNAPSHOT</version>
 </parent>
 <modelVersion>4.0.0</modelVersion>
 <artifactId>service-provider</artifactId>
 <properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 <java.version>1.8</java.version>
 </properties>
<dependencies>
 <dependency>
 <groupId>org.hibernate</groupId>
 <artifactId>hibernate-validator</artifactId>
 </dependency>
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter</artifactId>
 </dependency>
 <dependency>
 <groupId>org.apache.servicecomb</groupId>
 <artifactId>spring-boot-starter-provider</artifactId>
 </dependency>
 <dependency>
 <groupId>cn.itcast.servicecomb</groupId>
 <artifactId>service-inerface</artifactId>
 <version>1.0-SNAPSHOT</version>
 </dependency>
 <dependency>
 <groupId>org.apache.servicecomb</groupId>
 <artifactId>handler-flowcontrol-qps</artifactId>
 </dependency>
 <dependency>
 <groupId>org.apache.servicecomb</groupId>
 <artifactId>handler-bizkeeper</artifactId>
 </dependency>
 <dependency>
 <groupId>org.apache.servicecomb</groupId>
 <artifactId>handler-tracing-zipkin</artifactId>
 </dependency>
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
 </dependency>
 </dependencies>
</project>

编写 microservice.yaml 文件,具体配置如下:

APPLICATION_ID: start.servicecomb.io
service_description:
 name: provider
 version: 0.0.1
servicecomb:
circuitBreaker:
 Provider:
 provider:
 requestVolumeThreshold: 8
 fallbackpolicy:
 provider:
 policy: returnnull
 flowcontrol:
 Provider:
 qps:
 limit:
 gateway: 100
 handler:
 chain:
 Provider:
 default: qps-flowcontrol-provider,bizkeeper-provider,tracing-provider
 rest:
 address: 0.0.0.0:9080
 service:
 registry:
 address: http://192.168.229.133:30100
 autodiscovery: false

编写服务端 RestService 接口的实现类 RestProviderServiceImpl,如下所示:

package cn.itcast.service.impl;
import cn.itcast.service.RestService;
import org.apache.servicecomb.provider.rest.common.RestSchema;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* 以 rest 形式发布服务
*/
@RestSchema(schemaId = "hello")
@RequestMapping(path = "/hello")
public class RestProviderServiceImpl implements RestService {
   
 @Override
 @GetMapping(path = "/hello")
 public String restHello(String name){
   
 System.out.println(name);
 return "Hello World!";
 } }

编写 springboot 的服务启动类,代码如下:

package cn.itcast;
import org.apache.servicecomb.springboot.starter.provider.EnableServiceComb;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值