腾讯,又出来一个王炸!
Posted 微笑很纯洁
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了腾讯,又出来一个王炸!相关的知识,希望对你有一定的参考价值。
技术圈的变化,真的太快了。
1
微服务的核心
2017年,当时我还在一家小的互联网公司做技术负责人,第一次接触微服务感觉很兴奋。
带着技术小伙伴全部替换上 Spring Boot/Cloud 技术栈,作为第一批拓荒者,实实在在踩了很多坑,但也积累了很多一手经验。
到了现在,如果说你不懂微服务架构,几乎都没办法到互联网公司混了,行业普及度以及生态都越来越好。
在微服务架构中,最核心的组件是注册中心,服务之间的发现、调用全靠它来维护,重要性不言而喻。
刚开始我们选择了eureka,后来它不维护了;后来又使用了consul、nacos,但又不支持水平扩展。
直到最近,在技术调研过程中,发现腾讯开源了一个注册中心产品北极星,关注点颇高引发了我的好奇心。
2
快速入门
北极星的官网介绍如下:
北极星是腾讯开源的服务发现和治理中心,致力于解决分布式或者微服务架构中的服务可见、故障容错、流量控制和安全问题。
也就说它不但能解决基本的服务发现和注册功能,还给内置了很多高阶功能,比如动态路由、权重、熔断降级、限流等等。
下面我们来实践一番。
1、部署北极星
北极星分为单机版和集群版,一般我们个人开发演示使用单机版,在生产环境使用集群版本。
下载地址如下:
https://github.com/polarismesh/polaris/releases
我测试的电脑是win系统,所以选择的是版本:
polaris-standalone-release_v1.12.0.windows.amd64.zip
下载到本地解压后执行脚本:install.bat,如果界面报异常:
无法加载文件 D:\\xx\\polaris-standalone-release_v1.12.0.windows.amd64\\install-windows.ps1,因为在此系统上禁止运行脚本。
有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。
+ CategoryInfo : SecurityError: (:) [],ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnauthorizedAccess
请按任意键继续. . .
可在 powershell 执行下面命令后,再次执行脚本:install.bat,即可启动成功。
Set-ExecutionPolicy Unrestricted -Scope CurrentUser
在浏览器中访问:http://localhost:8080/,输入账户密码:polaris/polaris,即可登录北极星后台。
2、服务注册
接下来,我们创建一个项目 polaris-service-provider 注册到服务中心,项目 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.9</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
...
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.tencent.cloud</groupId>
<artifactId>spring-cloud-tencent-dependencies</artifactId>
<version>1.7.0-2021.0.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2021.0.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- 简单的 Spring Cloud Web 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 引入 Spring Cloud Tencent 的服务注册发现依赖 -->
<dependency>
<groupId>com.tencent.cloud</groupId>
<artifactId>spring-cloud-starter-tencent-polaris-discovery</artifactId>
</dependency>
</dependencies>
...
</project>
项目配置文件 application.yml,内容如下:
server:
port: 28888
spring:
application:
name: EchoServer
cloud:
polaris:
address: grpc://127.0.0.1:8091
discovery:
enabled: true
stat:
enabled: true
port: 28082
最后创建一个启动类, 并在启动类中添加基本的 Controller 调用服务,完整的示例代码如下:
@SpringBootApplication
public class SpringCloudProviderApplication
@RestController
static class EchoController
private final PolarisDiscoveryProperties properties;
EchoController(PolarisDiscoveryProperties properties)
this.properties = properties;
@GetMapping(value = "/echo/string")
public String echo(@PathVariable String string)
return "Hello PolarisMesh " + string + ", I'm " + properties.getService();
public static void main(String[] args)
SpringApplication.run(SpringCloudProviderApplication.class, args);
以上完成后启动项目,如后台启动日志显示:polaris registry, default EchoServer xx.xx.xx.xx:28888 register finished,即代表启动成功。
在北极星后台-服务列表,也可以看到这个这个实例的状态:
3、服务发现
上面示例,是我们提供了一个服务并且注册到了北极星,现在我们再创建一个项目 polaris-service-consumer,用来调用上面提供的服务。
pom.xml文件基本一致,只是增加了 Feign 依赖,用来注入服务调用。
<!-- 引入 Feign 依赖实现 Feign 调用 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
配置文件也和上面一致,只需要修改项目名称和端口信息即可,完整的调用示例代码如下:
@SpringBootApplication
@EnableFeignClients
public class SpringCloudConsumerApplication
public static void main(String[] args)
SpringApplication.run(SpringCloudConsumerApplication.class, args);
@RestController
static class EchoController
private final EchoServerClient client;
EchoController(EchoServerClient client)
this.client = client;
@GetMapping(value = "/echo")
public String echo(@RequestParam(name = "value") String val)
return client.echo(val);
@FeignClient(name = "EchoServer")
public interface EchoServerClient
@GetMapping("/echo/value")
String echo(@PathVariable("value") String value);
以上完成后,启动项目同样会在北极星后台-服务列表,看到我们刚刚启动的服务调用方。
4、测试调用
上面第一步我们启动了注册中心北极星,第二步创建了一个服务并且注册到了注册中心,第三步创建一个消费者,可以调用注册中心提供的服务。
接下来做一个测试,访问消费者服务,看是否能够从服务提供者获取到方法中的字符串。
在浏览器中访问地址:
http://localhost:38888/echo?value=neo
结果显示如下,证明我们调用服务提供者成功。
再做这样一个测试,复制项目polaris-service-provider 重命名为polaris-service-provider-2,同时修改项目端口号。
将项目polaris-service-provider中的方法如下;同样项目polaris-service-provider-2 中,将下面的 one 改为 two.
@GetMapping(value = "/echo/string")
public String echo(@PathVariable String string)
return "Hello one PolarisMesh " + string + ", I'm " + properties.getService();
依次启动项目polaris-service-provider和polaris-service-provider-2,这样打开北极星后台,我们会发现2个实例。
用浏览器再次多次访问:
http://localhost:38888/echo?value=neo
浏览器展示结果如下:
Hello one PolarisMesh neo, I'm EchoServer
Hello two PolarisMesh neo, I'm EchoServer
Hello one PolarisMesh neo, I'm EchoServer
Hello twoPolarisMesh neo, I'm EchoServer
...
证明2个服务端均被调用,并且自动进行了负载均衡转发。
3
高阶功能
相比于其它注册中心,北极星内置了很多高阶功能。
比如,在 Spring Cloud 体系内,如果要使用动态配置、限流、熔断等功能,还需要借助其它组件。
但北极星将这些功能,都已经集成到组件内部,我们只需要在后台做少量配置即可轻松实现这些功能。
1、动态配置
在项目中总有一些动态参数,我们不想直接固定到项目中,可以根据项目的运行状态来随时调整。
北极星在后台提供了此功能,只需要在后台配置上对应的文件,项目调用的时候指向此文件即可动态读取配置文件内容。
2、动态路由
上面我们在演示的时候,注册了2个服务提供者,默认会自动均衡对外提供服务。
但有时候为了进行灰度测试、蓝绿测试等,也可以通过在请求中添加参数等配置,将服务指向某一个固定的提供者实例。
这些都只需要对项目少量的修改,通过北极星后台设置即可实现。
3、熔断降级和限流
北极星提供熔断功能,根据实时采集的错误率等指标,及时熔断异常的服务、接口、实例或者实例分组,降低请求失败率。
当负载已经超过了系统的最大处理能力时,北极星提供服务限流功能,可针对不同的请求来源和系统资源进行访问限流,避免服务被压垮。
通过熔断和限流功能,最大程度的保护服务的稳定性,当个别服务器故障时也不影响服务整体功能。
4、可视化
后台提供了服务治理可视化监控视图,方便实时查看服务调用的各项指标。
支持请求量、请求延时和请求成功率的指标查询,支持服务调用关系和多维度的流量曲线查询,实现服务治理功能和流量观测一体化。
4
最后
通过以上的示例,大家应该也能看出来,做为一款注册中心组件,北极星使用起来还是很简单的。
相比其它的注册中心,北极星最大的优势是支持多语言、可水平扩展、跨地域容灾,同时内置很多成熟方案。
像动态路由、熔断、限流等功能,北极星将这些复杂的技术方案简单化,通过后台界面配置即可实现,大大简化了使用微服务的门槛。
目前北极星已经在业内大规模使用,比如微信、腾讯视频、央视频、腾讯会议等,可靠性高达99.999%。
北极星 Github 地址:https://github.com/polarismesh/polaris
也欢迎大家,长按识别下方二维码加入北极星官方交流群,参与交流、讨论:
恰好这两天腾讯云在举行 Techo Day 技术开放日活动,北极星就是本次活动重点给大家介绍的技术之一。
最后,腾讯将本次技术开放日所有资料和课件都整合成了一份《腾讯云云原生工具指南》,这份资料不但包含微服务等相关技术。
还有容器、DevOps、安全等课程和解决方案。很多人对云原生的范围是什么、具体有什么实践价值没太大的感知,这份课件材料有助于大家加深理解。
(长按识别即可下载)
点击阅读原文也可以获取,尤其是做开发的程序员,强烈推荐了解下。
以上是关于腾讯,又出来一个王炸!的主要内容,如果未能解决你的问题,请参考以下文章
杭电出了“王炸班”!考研3个清北8个浙大,就业人均起薪30万+
杭电AI王炸班冲上风口浪尖,本科没毕业就拿年薪百万,人均起薪30万+