微服务介绍

通常一个应用程序体系结构使用自身优势和具有挑战的标准化云环境,其中包括这些概念:
•弹性缩放
•不可变的部署
•一次性实例

•不太可预测的基础设施

云本地定义
•清除与底层操作系统的耦合,以确保最大的可移植性
•弹性缩放,而不会对工具,体系结构或开发实践进行重大更改
•能够对基础设施和应用程序中不可避免的故障进行恢复
•提供可配置的技术和商业洞察力
•利用云服务来处理这些任务,例如:
§存储
§排队
§缓存
•快速和可重复的部署可最大限度地提高敏捷性

•利用自动设置以最大限度地减少新开发人员的时间和成本

微服务:使开发人员更高效
•一种工程开发的方法,将每个应用程序减小为具有良好接口定义的单功能模块,这些接口由拥有整个服务生命周期的小团队独立部署和操作

•微服务通过最大限度地减少人员之间的沟通和协调来加速交付,同时减少变更的范围和风险

微服务:更高效地使用技术
•微服务是一种应用程序架构风格
§应用程序由微服务组件组成
•微服务,这种体系结构中的一个组件
§每个都是一个微型应用程序
§每个都关注于一项任务,即业务能力:单一责任原则
§每个都可以独立部署和更新
§它们是松散耦合的,就像在REST API中一样
•微服务促进敏捷开发
§他们让开发团队松散耦合
•这是架构风格的进化发展
§传统的系统(一个项目一个系统,整合所有的功能):一个可以完成所有任务的大型应用程序
§微服务:几个较小的应用程序,每个应用程序都是整体的一部分
•面向服务的进化与演变
§SOA:侧重于重用,技术集成问题和技术API
§微服务:专注于功能分解,业务功能和业务API


微服务架构
微服务是一个颗粒状的,解耦的组件,在更广泛的应用中
简单来说,微服务架构是分解大型的传统架构应用程序并将其转换为更易于管理的,和每一部分都是完全解耦的架构

它具有: 敏捷,可扩展,可快速恢复的特点。

使用微服务的示例应用程序
•航空公司预订应用程序
§预订航班
§时间表查询
§计算票价
§分配座位
§管理奖励
§更新客户
§调整库存
•每项服务都包含以下功能:
§记录日志
§度量
§ health check
§服务endpoint
§服务注册表
§服务管理


微服务架构的关键原则(key tenet)
大型的传统系统被分解成许多小型服务
§每个服务都在自己的进程中运行
§每个容器都有一个合适的云规则也是一个对应的服务
2.服务针对单一功能进行了优化
§每个服务只有一个业务功能
§单一责任原则:一个类(微服务)应该有一个,并且只有一个理由去做改变
3.通过REST API和消息代理进行通信
§避免通过数据库通信引入的紧密耦合
4.每项服务的持续集成continuous integration和持续部署continuous deployment(CI / CD)
§服务以不同的速率发展
§你让系统发展,但设定架构原则来指导这个发展
5.每服务高可用性(HA)和集群决策
§一种大小或扩展策略并不适合所有人

§并非所有服务都需要扩展; 其他的服务可能需要自动扩展到一个大数目

微服务的优势
•总之:独立
•由一个团队开发
§足够小,适合少于20人的团队
§所有团队成员都可以理解整个代码库
•独立开发
§有限的,明确的依赖于其他服务
•根据自己的时间表制定
§新版本的交付,独立于其他服务
•每一种都可以用不同的语言开发
§选择最好的语言
•管理自己的数据
§选择最好的技术和模式
•扩展和失败都是独立的
§隔离或者独立的问题

比较传统架构和微服务架构

类别 传统架构 微服务架构
架构 构建为单个逻辑可执行文件 构建为一套小型服务
模块化 基于语言的特征 基于业务能力
敏捷性 系统的更改涉及构建和部署新版本到整个应用系统 更改可以应用于每个服务
扩展性 只有一部分遇到瓶颈整个应用都要扩展的 在需要时更改可应用于单独的服务上
实现 通常完全在一种编程语言中开发 每种服务都可以用不同的编程语言开发
可维护性 大量的代码会吓坏新手程序员 较小的代码库更易于管理
部署 复杂部署需要维护窗口和预定的停机时间 简单部署:每个服都可以单独的部署,有可能实现零宕机时间
从技术角度看微服务的优势
•分发组件的简单和可行性
§互联网,内联网或网络成熟度
§RESTful API约定或感知的简单性,以及轻量级消息
•容易和简单的托管
§轻量运行时间
- 示例:Node.js和WebSphere Application Server Liberty
§简化基础设施
- 操作系统虚拟化(hypervisors),集装箱化(Docker),基础架构即服务(云基础架构)
- 工作负载虚拟化(例如:Kubernetes,Mesos和Spark)
§平台即服务
- 自动扩展,SLA管理,消息传递,缓存,构建管理
敏捷开发方法
§示例:Garage Method,Scrum,XP,TDD,CI / CD

§标准化的代码管理(例如:GitHub)

微服务挑战
•操作更加复杂,因为有更多移动部件需要监视和管理
•开发人员必须具备重要的操作技能(DevOps)
•服务接口和版本
•跨服务实现重复工作
•创建包含这些问题的分布式系统非常复杂:
§网络延迟
§容错
§序列化
•设计解耦的非事务系统很困难
•避免大量小型服务调用的延迟
•查找服务实例
•维护部分数据的可用性和一致性
•端到端测试

你可能感兴趣的:(Micro,Service)