加入收藏 | 设为首页 | 会员中心 | 我要投稿 西安站长网 (https://www.029zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

为什么大公司一定要使用微服务?

发布时间:2020-01-08 16:48:15 所属栏目:建站 来源:站长网
导读:副标题#e# 这几年在 Java 工程师招聘时,会看到很多人的简历都写着使用了 Spring Cloud 做微服务实现,使用 Docker 做自动化部署,并且也会把这些做为自己的亮点。 图片来自 Pexels 而比较有趣的这其中以小公司出来的人为绝大多数,大的公司出来的人简历上

还需要提到的是 Docker 容器技术。虽然这个对于微服务并不是必须的,但是容器技术轻量级、灵活、与应用依存、屏蔽环境差异的特性对于持续交付的实现是至关重要的,即使对于传统的单体应用也能够给其带来交付效率的大幅提升。

架构设计模式

在引入微服务之后,传统的单体应用变为了一个一个服务,之前一个应用直接提供接口给客户端访问的架构不再适用。

微服务架构下,针对不同设备的接口做为 BFF 层(Backend For Frontend),也叫做用户体验适配层,负责聚合、编排微服务的数据转换成前端需要的数据。

服务之间的调用则在允许的情况下(允许延迟)尽可能使用异步消息传递方式,如此形成面向用户体验的微服务架构设计模式。

如下图所示:

为什么大公司一定要使用微服务?

Client→API Gateway→BFF(Backend For Frontend)→Downstream Microservices:

后台采用微服务架构,微服务可以采用不同的编程语言和不同的存储机制。

前台采用 BFF 模式对不同的用户体验(如桌面浏览器,Native App,平板响应式 Web)进行适配。

BFF、API Orchestration Layer,Edge Service Layer,Device Wrapper Layer 是相同的概念。

BFF 不能过多,过多会造成代码逻辑重复冗余。

可以将网关承担的功能,如 Geoip、限流、安全认证等跨横切面功能和 BFF 做在同一层,虽然增加了 BFF 层的复杂性,但能够得到性能优势。

服务拆分

微服务架构最核心的环节,主要是对服务的横向拆分。服务拆分就是将一个完整的业务系统解耦为服务,服务需要职责单一,之间没有耦合关系,能够独立开发和维护。

服务拆分不是一蹴而就的,需要在开发过程中不断地理清边界。在完全理清服务之前,尽量推迟对服务的拆分,尤其是对数据库的拆分。

拆分方法如下:

基于业务逻辑拆分

基于可扩展拆分

基于可靠性拆分

基于性能拆分

其中,对于无法修改的遗留系统,采用绞杀者模式:在遗留系统外面增加新的功能做成微服务方式,而不是直接修改原有系统,逐步的实现对老系统替换。

拆分过程需要遵守的规范如下:

先少后多、先粗后细(粒度)

服务纵向拆分最多三层,两次调用:Controller、组合服务、基础服务

仅仅单向调用,禁止循环调用

串行调用改为并行调用或者异步化

接口应该幂等

接口数据定义严禁内嵌,透传

规范化工程名

先拆分服务,等服务粒度确定后再拆分数据库。

微服务框架

上面讲述了微服务架构的众多基础设施,如果每一个基础设施都需要自己开发的话是非常巨大的开发工作。目前市面上已经有不少开源的微服务框架可以选择。

Spring Boot

Spring Boot 是用来简化新 Spring 应用的初始搭建以及开发过程的。其虽然不是微服务框架,但其设计的初衷本质就是微应用的底层框架,因此非常适合用于微服务基础设施的开发以及微服务的应用开发。

尤其对于 Spring 技术栈的团队来说,基于 Spring Boot 开发微服务框架和应用是自然而然的一个选择。

Dubbo&Motan

Dubbo 是阿里开源的服务治理框架。其出现在微服务理念兴起之前,可以看做是 SOA 框架的集大成之作。

但其仅仅包含了微服务基础设施的部分功能,诸如熔断、服务跟踪、网关等都没有实现:

服务发现:服务发布、订阅、通知。

高可用策略:失败重试(Failover)、快速失败(Failfast)、资源隔离 - 负载均衡 :最少活跃连接、一致性 Hash、随机请求、轮询等。

扩展性 :支持 SPI 扩展(service provider interface)。

其他 :调用统计、访问日志等。

Motan 则是微博开源的类似 Dubbo 的 RPC 框架,与 Dubbo 相比更轻量级。

Spring Cloud

Spring Cloud 是基于 Spring Boot 实现的微服务框架,也可以看做一套微服务实现规范。

基本涵盖了微服务基础设施的方方面面,包括配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等。

其基于 Spring 生态,社区支持非常好。但其很多组件都没有经过生产环境验证,需要慎重选择。

Spring Cloud Netflix 是 Spring Cloud 的一个子项目,是 Spring 对 Netflix OSS 的集成实现。

基于 Netflix 的大规模使用,其中的已经被广泛使用的组件包括:

Eureka:服务注册和服务发现

Ribbon:弹性而智能的进程间和服务通讯机制,客户端负载均衡

Hystrix:熔断器,在运行时提供延迟和容错的隔离

Zuul:服务网关

此外,另一个子项目 Spring Cloud Alibaba 则是 Alibaba 开源的基于 Spring Boot 的微服务框架,主要是对阿里云服务的支持。

Service Mesh

上述的微服务框架都是侵入式的,服务化的过程都需要进行代码改造。Service Mesh 则是下一代微服务架构,最明显的特征就是无入侵。采用 Sidecar 模式来解决系统架构微服务化后的服务间通信和治理问题。

如下图所示:

(编辑:西安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读