微服务基础知识

前言    

   入职吉利(“浙江吉利控股集团有限公司”)以来,一直有在用微服务。包括sweet框架。就最近使用微服务做一个总结

什么是微服务

“微服务”是系统架构上的一种设计风格,它的主旨是将一个原来独立的系统拆分为多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间通过HTTP的RESTful API进行通信写作。被拆分的每一个小型服务都围绕着系统中的某一项或一些耦合度较高的业务功能进行构建,并且***每个服务都维护着自身的数据存储、业务开发、自动化测试案例以及独立部署机制***。

与单体系统的区别

在传统的企业架构中,我们针对一个复杂的业务需求通常使用对象或业务类型来构建一个单体项目。在项目中我们通常将需求分为:数据库、服务端处理、前端展现。但是随着企业的发展,系统为了应对不同的业务需求会不断为该单体项目增加不同的业务模块;同时随着移动端设备的进步,前端展现模块已经不仅仅局限于WEB的形式,这对后端向前端的支持需要更多的接口模块。单体应用由于面对的业务需求更为宽泛,不断扩大的需求会使得单体应用变得越来越臃肿。单体应用的问题就逐渐凸显出来。

由于单体系统部署在一个进程内,往往我们修改了一个很小的功能。为了部署上线会影响其他功能的运行。并且单体应用中的这些功能的模块的使用场景、并发量、消耗的资源类型各有不同,对于资源的利用又互相影响,这样使得我们队各个业务模块的系统容量很难给出较为准确的评估。所以单体系统在初期虽然非常方便地进行开发和使用,但是随着系统的发展,维护成本会变得越来越大。且难以控制

如何实施微服务

实施微服务的问题:

  • 运维的新挑战:在微服务架构中,运维人员需要维护的进程数量会大大增加。
  • 接口的一致性:虽然我们拆分了服务,但是业务逻辑上的依赖并不会消除,只是从单体应用的中代码依赖变为了服务间的通信依赖。
  • 分布式的复杂性:由于拆分后各个微服务都是独立部署并运行在各自的进程中,他们只能通过通信来进行写作,所以分布式环境的问题都将是微服务架构系统设计时需要考虑的重要因素,例如:网络延时、分布式事务、异步消息等。

服务组件化

组件,是一个可以独立更换和升级的单元。在微服务架构中,需要我们对服务进行组件化分解。

按业务能力组织团队

当决定如何划分微服务时,通常也意味着我们要开始对团队进行重新规划与组织。由于每个微服务都是针对特定业务的宽栈或全栈实现,既要负责数据的持久化存储,又要负责用的接口定义等各种跨专业领域的能力。因此,面对大型项目的时候,对于微服务团队的拆分更加建议按业务线的方式进行拆分,一方面可以有效减少服务内部修改所产生的消耗;另一方面,团队边界可以变得更加清晰。

智能端点与哑管道

在微服务架构中,通常会使用以下两种服务调用方式:

  • 第一种,使用HTTP的RESTful API或更轻量级的消息发送协议,实现信息传递与服务调用的触发
  • 第二种,通过在轻量级消息总线上传递消息,类似RabbitMQ等一些提供可靠异步交换的中间件。

去中心化治理

在实施微服务架构时,通过采用轻量级的契约定义接口,使得我们对于服务本身的具体技术平台不再那么敏感,这样整个微服务架构系统中的各个组件就能针对其不同的业务特点选择不同的技术平台。

去中心化管理数据

在实施微服务架构时,每个服务都有自己的数据库,这就是数据管理的去中心化。

基础设施自动化

在微服务架构中,务必从一开始就构建起“持续交付”平台来支撑整个实施过程。包括:自动化测试和自动化部署

容错设计

在单体应用中,一般都是“一挂全挂”。而在微服务架构中,由于服务都运行在独立的进程中,所以存在部分服务出现故障,而其他服务正常运行的情况。所以在微服务架构中,快速检测出故障源并尽可能地自动恢复服务是必须被设计和考虑的。

微服务实现-Spring Cloud

为什么选择Spring Cloud

目前在市场上针对不同引用场景出现各种问题的各种解决方法和开源框架。一览如下:

  • 服务治理:阿里巴巴的开源的Dubbo和当当网的DubboX、Netflix的Eureka、Apache的Consul
  • 分布式配置管理:百度的Disconf、Netflix的Archaius、360的QConf、Spring Cloud的Config、淘宝的Diamond
  • 批量任务:当当的Elastic-Job、Spring Cloud的Task
  • 服务跟踪:京东的Hydra、Spring Cloud的sleuth、Twitter的ZIPkin等
  • ... ... 以上都整合了来自不同公司或组织的诸多开源框架,并加入针对自身业务的一些优化,所以找不到一个完全相同的架构方案。Spring Cloud可以说是针对微服务架构的巨大支持。它不像以上框架,只是解决微服务中的某一个问题,而是一个解决微服务架构实施的综合性解决框架,它整合了诸多被广泛实践和证明过的框架作为实施的基础部件。

Spring Cloud简介

虽然我们开发过程中使用的是sweet框架,但其底层实现还是基于Spring Cloud。这里对Spring Cloud做一个简单的介绍。 Spring Cloud是一个基于Spring Boot实现的微服务架构开发工具。它为微服务架构中涉及到的配置管理、服务治理、断路器、智能路由、微代理、控制总线、全局锁分布式会话等操作提供了一个简单的开发方式。 Spring Cloud包含了多个子项目。

  • Spring Cloud Config:配置管理工具,支持使用Git存储配置内容
  • Spring Cloud Netf:核心组件,对多个Netflix OSS开源套件进行整合
    • Eureka:服务治理组件,包含服务注册中心、服务注册和发现机制的实现
    • Hystrix:容错管理组件,实现断路器模式,帮助服务依赖中出现的延迟和为故障提供强大的容错能力
    • Ribbon:客户端负载均衡的服务调用组件。
    • Feign:基于Ribbon和Hystrix的声明式服务调用组件
    • Zuul:网关组件,提供智能路由、访问过滤等功能
    • Archaius:外部化配置组件

Spring Cloud和Dubbo的优劣

微服务选择Spring Cloud还是Dubbo?

转载于:https://my.oschina.net/mrku/blog/1839068

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值