LOADING

Follow me

微谈-微服务技术选型【zoues.com】
一月 9, 2017|DockerPaaS

微谈-微服务技术选型【zoues.com】

微谈-微服务技术选型【zoues.com】

微谈

微服务技术选型

摘要

本文主要分享基于Spring Cloud 整体化微服务技术选型与运维,主要包括以下内容:

  • 架构的演变

  • 微服务技术栈

  • 微服务运维

一、 架构演变之路

1. 传统的MVC单体应用

适用于较小业务规模且所有逻辑集成在单体程序中,使用双机或多机模式部署,前端入口做负载均衡。

2. RPC多应用架构

随着业务规模扩大,垂直的应用较多,应用间交互有两种方式,一种通过共享数据库做交互(不建议使用,但现实用的人不少),另一种使用RPC框架作为应用之间沟通的桥梁,RPC可以基于HTTP或直接走TCP协议。

3. SOA服务化架构

SOA是一种粗粒度,松耦合的以服务为中心的架构,优点有松耦合,标准服务等,缺点中心化架构,不适合服务的快速迭代。

4. 微服务架构

微服务与SOA之间差了一个ESB,是更小粒度的原子化服务(“微”无统一标准,原则一个微服务只做一件事)随着DevOps理论的发展与基于Docker等轻量级容器的成熟应用,使得微服务成为互联网应用架构未来的演变方向,通过服务的原子化拆分,一切都去中心化,形成可独立部署的简单服务。微服务看起来不错,但打开姿势不对就……, 微服务基石 DevOps能力、服务构建(自动化)、团队和文化(人才是关键),缺一不可。

二、 微服务技术栈选型

一切来自开源世界的善意都不应拒绝

对于用于服务发现,目前业界提供了很多种服务发现解决方案有DNS, zookeeper, consul, Eureka等,DNS不用多说,适合于动态性不高的服务系统,下面我们对比一下zookeeper, consul, Eureka。

Zookeeper是起源于Hadoop项目,基于Java语言开发,采用Paxos算法保证最终一致性,客户端可以支持多种语言访问,采用ACL控制权限,主要优势是其成熟、健壮以及丰富的特性,缺点是过重,无用特性过多,造成资源的浪费,Zookeeper对大数据贡献很大,但已经老态龙钟了,我们有了更好的选择,比如Consul和Eureka。

Consul 是HashiCorp公司推出的开源工具,基于Go语言开发,使用 Raft 算法来保证强一致性,支持 http 和 dns 协议接口,官方提供多语言客户端,一站式解决,服务发现与注册,健康检查统统都有,并且跨语言和跨平台,缺点是比较新,案例和文档都比较少,但在跨语言平台下该选择也不错。

Eureka由Netflix公司贡献的开源工具,已经成功应用于AWS云,客户端负责决定相应服务实例的网络位置,并且对请求实现负载均衡,客户端发现模式的优点是服务调用、负载均衡不需要和Eureka Server通信,可用性高和性能高;但官方只提供了Java客户端,如果需要跨多语言平台场景不合适使用。

Brooks说“没有银弹”,说明在软件开发过程里是没有万能的终杀性武器的,只有各种方法综合运用,才是解决之道,我们任何一种技术的选择都需要因地制宜,对比上面特性,基于Java平台,选择顺序是Eureka-》Consul-》Zookeeper,基于.NET平台,选择顺序是Consul-》Zookeeper-》Eureka。

本文是基于Spring Cloud技术栈来实现,我们简单介绍一下基于Eureka和Consul实现的基本组件

Eureka方案组件

Spring Cloud Netflix  — 针对多种Netflix组件提供的开发工具包,其中包括Eureka、Hystrix、Zuul、Archaius等

Consul方案组件

Spring Cloud Consul  — 封装了Consul操作,consul是一个服务发现与配置工具,与Docker容器可以无缝集成

公共组件

Spring Cloud Sleuth  — 为SpringCloud应用实现了一种分布式追踪解决方案,其兼容了Zipkin, HTrace和log-based追踪

Spring Cloud Config  — 配置管理开发工具包,可以让你把配置放到远程服务器,目前支持本地存储、Git以及Subversion

Spring Cloud Bus  — 事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与Spring Cloud Config联合实现热部署

Spring Boot — 简化创建产品级的 Spring 应用和服务,简化了配置文件,使用嵌入式web服务器,含有诸多开箱即用微服务功能,可以和spring cloud联合部署。

Spring Boot Admin — 对Spring Boot应用信息进行可视化

ZipKin  — 分布式追踪系统,Zipkin对SpringCloud应用进行服务分析

RabbitMQ/Kafka  — 消息中间件

Docker —  开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux 机器上,也可以实现虚拟化

Swagger —  API在线文档生成和测试的利器,微服务辅助设计能手

三、 微服务运维

运维对微服务格外重要,微服务是小粒度的原子化服务,服务数量规模大,我们需要持续集成(CI)和持续交付,如果方式不正确,那么带来的复杂性会使你头痛,下面列出几点微服务部署原则:

1. 独立构建,一个服务一个代码库,一个微服务一个CI

2. 独立部署,一个微服务一个LXC或者Docker容器

3. 持续交付流程,编译&快速测试-》耗时测试-》用户验收测试-》性能测试-》生产环境

4. 自动化,皮之不存,毛将焉附,自动化是以上三原则基石

四、 结束语

微服务框架和自动化运维只是辅助性工具,好的微服务设计才是关键,微服务需要围绕业务概念建模,一切都去中心化,可监控得服务调用流,建立高可用的自治的小服务。如果认同微服务设计能给我们带来益处,接下来需要进行拆分设计和演进现有系统,最终向着微服务道路前进,Just Do It!

no comments
Share

发表评论