发帖  主题  评论  推荐  标签 用户 查搜   用户 密码 自动 注册  
 
面向对象 设计模式 领域驱动设计 企业架构 框架 开发教程 微服务 大数据 扩展性 并发编程 事件驱动 分布式 CQRS

微服务microservice

  微服务是指提供单个业务功能的服务,从技术角度看就是一种小而独立的处理过程,类似进程概念,能够自行单独启动或销毁,拥有自己独立的数据库。

  一个复杂软件架构是由很多这样小而独立运行(有自己的端口)微服务组成,这些独立处理组件之间通讯是通过与语言无关的API进行,简单协议有同步性质的RMI/RPC和 RESTful Web Services,异步的消息推送和Reactive方式。

  这些模块化的方式能够使得公司将项目分解分散到多个开发团队,跨不同业务部门,提供非常充分的灵活性,帮助提高项目的生命周期,加快项目开发完成效率。

  每个微服务组件都有自己分配的存储 内存和CPU资源,这就使得硬件利用更加易于优化和跟踪,特别是在基于云的Pass环境,开发团队可以使用他们喜欢的技术,任何语言都可以,只要确保微服务之间是可交互的,能够最终组合起最后的应用。

  当管理复杂性会因为采取微服务架构而降低,通常更新其中一个微服务组件不会引起连锁反应,因为微服务之间是松耦合的。

  目前使用微服务的企业有:Netflix Twitter Amazon Web Services (AWS), Google, eBay等。

  因为有很多应用和服务部署在基于云主机的环境中,微服务架构将会严重依赖容器技术,容器隔离了微服务处理过程,将一个应用切分为一个个小的实例,这些容器中的小实例有自己的端口和虚拟化环境。

  广泛使用的容器技术是Docker, 一种基于Linux的开源实现,由很多软件公司支持如 Canonical, Red Hat,和Parallels. PaaS服务支持包括Google App Engine, Red Hat Open Shift,和VMware的 Cloud Foundry,。

  微服务架构不只是传统服务变微变小。微服务两个显著特点是:微服务本身是无状态的;微服务之间很少可变共享。可以设想一下,如果微服务之间可以共享,那么带来两个问题:微服务团队之间需要合作,因为共享的是一个统一数据库,如果这种共享没有带来沟通成本,没有破坏一个团队就能搞定的宗旨,那么这种共享数据库也是可以考虑,但是这种情况很少,大部分团队因为共享问题破坏了独立性;再者,微服务如果使用Docker分别打包在一个容器中,这些容器可能是跨不同基础设施部署,部署方式很灵活,是一种cloud native应用,而共享数据库属于底层基础设施,显然提高了部署难点。

  另外,传统服务之间通讯无论是RPC/RMI或是Http/RESTful都是同步的,而微服务之间通信最好是异步的或reactive的,也就是非同步的。根据FLP不可能原理,网络默认是不可靠的,RPC在一旦发生网络堵塞会连环爆炸,事后监控并不能根本解决这个问题,需要从CAP定理角度进行平衡设计,引入事件驱动或Pub/Sub消息方式能在提高网络容错性的同时,保证数据最终一致性,柔性事务是微服务环境的主要选择。

  传统服务变成铁板一块经常是因为事务处理要求,某个服务方法的代码很多,需要塞在同一个事务边界内,虽然这带来了高一致性的,但是扩展性比较差,因为同一个事务边界内的动作无法分离到几个微服务中,因此,使用微服务必须积极拥抱最终一致性,对分布式系统以及CAP定理有一定理解。当然,这些都是必须有多个微服务调用的情况下才需要考虑,由于微服务粒度小且专一,可以通过组合替代共享继承的思路,容忍代码有一定的重复性。

  一个微服务架构需要具备以下条件:

  • 基础监视 测量和健康检查
  • 分布式日志 跟踪
  • 针对每个服务,不只是隔离代码,还需要在构建+测试+打包+提交整个环节隔离。
  • 能清晰定义每个服务的上下游、编译时间和运行依赖。
  • 掌握如何构建、暴露和维护好的API和合约。
  • 需要尊重b/w和f/w兼容性,即使你可能不同时是你生产的服务的消费者。
  • 好的单元测试和更具有可读性
  • 注意微服务与模块和库包区别,以及分布式整体型monolith, 协同版本发布,数据库驱动继承的区别。
  • 知道基础设施的自动化
  • 需要基于CI/CD持续集成/持续递交的基础设施 

 

微服务理论与实践

微服务架构

微服务实现工具概述

为什么分布式微服务很难?

三件事能让你的微服务更具有弹性

为什么微服务应该是事件驱动?

使用消息系统集成和扩展微服务

如何使用开源建立一个分布式系统监控系统?

什么是cloud native应用? 

Docker教程

什么是DevOps?

Netflix hystrix入门教程

QBit微服务microservice教程

Lagom是一个集成ES/CQRS的Reactive微服务框架

使用Spring Cloud和Reactor在微服务中实现EventSourcing

微服务的最终一致性与事件流

什么是Serverless架构?

一个分布式异步RESTful框架原型案例代码

Node.js的健康检查

KumuluzEE入门教程

JSON Web Tokens(JWT)教程

使用JSON Web Tokens和Spring实现微服务

使用Vert.x开发响应式微服务

Spring Cloud微服务架构介绍

使用Spring Cloud Sleuth跟踪微服务

使用Spring Cloud Ribbon重试请求

通过事件风暴和DDD建立微服务时优先考虑

正好一次(Exactly-once)消息传递在Kafka中已经完全支持

如何将单体分解成微服务?

聊聊微服务的分布式通讯

分布式事务可能是个伪概念

业务流程的新实现:微服务和事件编排

 

微服务相关专题

更多微服务专题

REST服务专题

Reactive编程

事件和EventSourcing

敏捷与快速交付

 

解道移动版 | 关注解道 | 联系解道 | 关于解道 | 广告联系 | 网站地图 | 设为首页

沪ICP证12033263 如有意见请与我们联系 Powered by JdonFramework
返回顶部