01微服务概述
一、什么是微服务
- 马丁.福勒(Martin Fowler)论文网址:https://martinfowler.com/articles/microservices.html(中文)
- 用来描述将软件应用程序设计为独立可部署服务套件的特定方法。就目前而言,虽然对于微服务业界并没有一个统一的、标准的定义,但是围绕着业务能力、自动部署、端点中的智能以及语言和数据的分散控制,围绕着组织有一些共同的特征。
- 简而言之架构风格是一种将单个应用程序开发为一组小服务的方法,每个服务运行在自己的流程中,并且与轻量级机制(通常是HTTP资源API)通信。这些服务是围绕业务能力建立的,并且可以由完全自动化的部署机器独立部署。这些服务的集中管理只有最低限度,可以用不同的编程语言编写并使用不同的数据存储技术。

从技术角度理解
- 微服务就是将传统的一站式项目应用,来根据业务进行拆分成一个一个的服务,从而彻底的去掉耦合。
- 每个微服务提供了单个业务功能的服务,说白就是一个服务一个事件也就一个独立的处理过程,类似进程的概念,能够独立运行和销毁,甚至拥有自己的数据库。
- 如订单就是订单,支付就是支付…

二、微服务与微服务架构
1. 微服务
- 强调的是服务的大小,关注的是某一个点,具体解决某个一个问题/落地的对应服务的一个服务应用。
- 如同医院中的眼科只做眼科的事,化验科只做化验科的事,换句话说,专业的事交给专业的来做。
- 狭意的看,可以看作Eclipse/IntelliJ IDEA里面的一个个微服务Project/或者Module
2. 微服务架构
- 微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行在其独立的自己的进程中,服务之间互相协调、互相配合,为用户提供最终价值。
- 服务之间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。
- 每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。
- 应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也可以使用不同的数据存储。
换句话说,比如医院中眼科/化验科/等就一个小的服务,而对外提供一个大的服务就是医院。
三、微服务优缺点
1. 优点
- 每个服务足够内聚,够小,代码容易理解这样能够明确的指定一个业务功能或者是业务需求。
- 一个微服务开发简单,开发效率高,因为一个微服务就是专一的只做一个事情。
- 微服务能够被小团队单独开发,这个小团队是2到5人的开发人员组成。
- 微服务是松偶合的,是有功能意义的服务,无论是在开发阶段或者是在部署阶段都是独立的。
- 微服务可以使用不同的语言进行开发。
- 微服务容易与第三方的技术进行集成,允许容易且灵活的方式集成自动部署,通过持续集成工具进行集成,如Jenkins,Hudson等…
- 微服务易于被一个开发人员理解,修改和维护,这样小团队能够更关注自己的工作成果。无需通过合作才能体现价值。
- 微服务允许利用融合新的技术。
- 微服务只专注业务逻辑的代码,不会和HTML/CSS等前台技术以及组件混合
如平常开发中的两种模式:
一种模式:前后的分离模式。程序员只是专注后端的代码,和前端工程师安装约定的Rest地址+输入的参数格式+输出的参数格式。
二种模式:全栈开发。H5+CSS+JAVAEE… - 每个微服务都有直接的存储的能力,可以拥有自己的数据库,也可以用拥有统一的数据库。
2. 缺点
- 开发人员要处理分布式系统的复杂性
- 多服务运维难度,随着服务的增加,运维的压力也在增大
- 系统部署依懒
- 服务器之间的通信成本加大
- 数据的一致性
- 系统的集成测试难度加大
- 性能的监控难度加大
四、微服务技术栈
| 微服务条目 | 落地技术 |
|---|---|
| 服务开发 | Springboot、Spring、SpringMVC |
| 服务配置与管理 | Netflix公司的Archaius、阿里的Diamond等 |
| 服务注册与发现 | Eureka、Consul、Zookeeper等 |
| 服务调用 | Rest、RPC、gRPC |
| 服务熔断器 | Hystrix、Envoy等 |
| 负载均衡 | Ribbon、Nginx等 |
| 服务接口调用(客户端调用服务的简化工具) | Feign等 |
| 消息队列 | Kafka、RabbitMQ、ActiveMQ等 |
| 服务配置中心管理 | SpringCloudConfig、Chef等 |
| 服务路由(API网关) | Zuul等 |
| 服务监控 | Zabbix、Nagios、Metrics、Spectator等 |
| 全链路追踪 | Zipkin、Brave、Dapper等 |
| 服务部署 | Docker、OpenStack、Kubernetes等 |
| 数据流操作开发包 | SpringCloud Stream(封装与Redis,Rabbit、Kafka等发送接收消息) |
| 事件消息总线 | Spring Cloud Bus |
| … |
五、为什么选择SpringCloud作为微服务架构
1. 选型依据
- 整体解决方案和框架成熟度
- 社区热度
- 可维护性
- 学习曲线
2. 目前各大IT公司用的微服务架构
- 阿里Dubbo/HSF(分布式高速框架可理解二代Dubbo,俗称:好舒服)
- 京东JSF(俗称:京舒服)
- 新浪微博Motan(俗称:茅台)
- 当当网DubboX
3. 各微服务框架对比

)]
195

被折叠的 条评论
为什么被折叠?



