文档章节

微服务架构

yangty2017
 yangty2017
发布于 2017/08/11 20:56
字数 2221
阅读 579
收藏 25
点赞 1
评论 3

微服务架构

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

与单体系统的区别

    传统的企业系统中,针对一个复杂的业务需求通常使用对象或业务类型来构建一个单体项目。

    在项目中通常将需求分为三个主要部分:数据库、服务端处理、前端展现。在业务发展初期,由于所有的业务逻辑在一个应用中,开发、测试、部署、都比较容易方便。但是企业发展,系统为了应对不同的业务需求会不断为该单体项目增加不同的业务模块;同时随着移动端设备的进步,前端展现模块已经不仅局限于web的形式,这对于系统后端向前端的支持需要更多的接口模块。单体应用由于面对的业务需求更为宽泛,不断扩大的需求会使得单体应用变得越来越臃肿。单体应用的问题就逐渐凸显出来,由于单体系统部署在一个进程中,如果修改了一个小的功能,为了部署上线会影响其他的功能运行。并且单体应用中的这些功能模块的使用场景、并发量、消耗的资源类型都各有不同,对于资源的利用又相互影响,这样使得我们对各个业务模块的系统容量很难给出较为准确的评估。所以,单体系统在初期虽然非常方便的进行开发和使用,但是随着系统的发展,维护成本会变得越来越大,且难以控制。

微服务架构优点

  • 易于开发和维护:一个微服务只关注一个特定的业务功能,所以它业务清晰、代码量少。开发和维护单个微服务相对简单;
  • 局部修改容易部署:对于某个微服务进行修改,只需要重启这个服务即可;
  • 单个微服务启动较快:单个微服务代码量少,启动快;
  • 技术栈不受限制:可以结合项目业务及团队特点,合理选择技术栈,比如某些服务使用mysql,某些使用Neo4j
  • 按需伸缩:根据需求,实现细粒度的扩展。例如某个微服务遇到了瓶颈,可以结合这个微服务的业务特点,增加内存,升级cpu或者横向扩展节点。

微服务架构的缺点

  • 运维成本要求较高:更多的服务需要投入运维,需要保证几十个甚至几百个服务正常运行与协作;
  • 分布式固有复杂性:使用微服务构建的是分布式系统,系统容错,网络延迟,分布式事务
  • 接口调整成本高:微服务之间通过接口进行通信。如果修改一个微服务API,可能所有使用了该接口的微服务都需要做调整;
  • 重复劳动:很多服务功能都会使用相同的功能,而这个功能并没有达到分解为一个微服务的程度,这时可能各个服务都会开发这一功能,从而导致代码重复。

 

如何实施微服务

运维的新挑战:

      微服务架构中,运维人员需要维护的进程数量会大大增加,运维过程中需要更多的自动化,需要运维人员具备一定的开发能力来编排运维过程并能自动运行起来。

接口的一致性:

      虽然拆分了服务,但是业务逻辑上还是存在依赖,微服务之间的依赖关系是从代码依赖变为了服务间的通信依赖。需要更加完善的接口和版本管理。

分布式的复杂性:

      网络延迟、分布式事务、异步消息等

服务组件化:

      微服务架构中,需要对服务进行组件化分解。每一个服务都独立开发、部署,可以有效避免一个服务的修改引起整个系统的重新部署。

按业务组织团队:

       由于每一个微服务都是针对特定业务的宽栈或者全栈实现,需要负责数据持久化,负责用户接口定义等跨领域专业的职能。因此微服务团队建议按照业务线的方式拆分,减少服务内部修改产生的内耗;另一方面团队边界变得清晰;

持续性迭代:

      微服务架构实施不是以完成开发与交付并将成果交接给维护者为最终目标。开发团队通过了解服务在具体的生产环境中的情况,可以增加对具体业务的理解,甚至会逐步超过产品经理,很容易通过生产环境发现这些特殊潜在的问题与需求。

      所以微服务架构是适用于持续关注服务的运作情况,并不断分析以帮助用户来改善业务功能。

智能断电与哑管道:

    单体应用中,组件之间通过函数调用的方式进行交互协作。微服务架构中,组件间通信模式改成RPC方式调用,会导致微服务之间产生烦琐的通信,所以需要粗粒度通信协议。

    微服务架构通常使用两种服务调用方式:

     第一种,使用HTTP的RESTful API或者轻量级的消息发送协议,实现信息传递与服务调用的触发。

     第二种,通过轻量级消息总线传递消息(Spring Cloud Bus),类似RabbitMQ等异步交换的消息中间件。

去中心化治理:

      当采用集中化治理方案时,通常在技术平台上统一标准。再实施微服务架构时,通过采用轻量级的         契约定义接口,对于服务本身的技术平台不再那么敏感,整个微服务架构系统中的各个组件针对其不同     的业务特点选择不同的技术平台,不会出现杀鸡用牛刀的尴尬处境。

      不是每一个问题都是钉子,不是每一个解决方案都是锤子。

去中心化管理数据:

    实施微服务架构时,希望每一个服务管理其有的数据库,在区中心化过程中,除了将原数据库中的存储内容拆分到新的同平台的其他数据库实例中之外,也将特殊结构的或者业务特性的数据存储到一些其他技术的数据库实例中,比如日志信息存储到MongoDB中,用户登录信息存储到Redis中。

基础设施自动化:

       自动化测试、自动化部署

容错设计:

       微服务架构中,快速检测出故障源并尽可能地自动恢复服务是必须被设计和考虑的。

每个服务中实现监控和日志记录的组件,比如服务状态,断路器状态,吞吐量,网络延迟等关键数据的仪表盘;

演进式设计:

       要实施一个完美的微服务架构,需要的考虑的设计与成本都非常大,对于没有足够经验的团队,甚至比单体应用付出更多的代价。所以不管是产品还是项目初期,以单体传统的方式来设计和实施,一方面系统体量并不会很大,构建和维护成本都不高。另一方面,初期的核心业务在后阶段通常也不会有较大的变化。随着系统的发展或者业务需要,可以将一些经常变动或是一定时间效应的内容进行微服务处理,并逐渐将原来在单体系统中多变的模块逐步拆分出来,而稳定不太变化的模块就形成了一个微服务存在于整个架构中。

 

常见的微服务架构图

微服务设计模式:https://my.oschina.net/yangty2017/blog/993744

 

© 著作权归作者所有

共有 人打赏支持
yangty2017
粉丝 3
博文 42
码字总数 38659
作品 0
沈阳
高级程序员
加载中

评论(3)

leixu2
leixu2

引用来自“leixu2”的评论

微服务中, 数据库设计 是怎样?
比如 xx 列表需要以来用户信息,数据库独立的,是经过http接口检索出用户信息再合并吗?

引用来自“yangty2017”的评论

业务,数据都是独立的,至于通过rest还是消息通道就看驱动事件模型的业务场景
能否详细说明一下。。

比如 有 2个库 用户信息在A库,业务数据在B库(并没有冗余用户基本信息,只是关联ID)。

当我一个功能需要从B库获取数据并且还要展示创建者,你们是怎么实现讷?
yangty2017
yangty2017

引用来自“leixu2”的评论

微服务中, 数据库设计 是怎样?
比如 xx 列表需要以来用户信息,数据库独立的,是经过http接口检索出用户信息再合并吗?
业务,数据都是独立的,至于通过rest还是消息通道就看驱动事件模型的业务场景
leixu2
leixu2
微服务中, 数据库设计 是怎样?
比如 xx 列表需要以来用户信息,数据库独立的,是经过http接口检索出用户信息再合并吗?
解析微服务架构(一):什么是微服务

解析微服务架构系列文章将分几篇描述微服务的定义、特点、应用场景、企业集成架构的演进以及微服务转型思路和技术决策考虑等内容,并以IBM技术为例介绍如何实现微服务架构转型。 为什么需要微...

mosaic101 ⋅ 2016/10/23 ⋅ 0

Spring Cloud微服务升级总结

一.应用系统的架构历史 二.什么是微服务? 2.1 微服务概述 起源:微服务的概念源于 2014 年 3 月 Martin Fowler 所写的一篇文章“Microservices”。文中内容提到:微服务架构是一种架构模式,...

嘿嘿!! ⋅ 2017/11/24 ⋅ 0

微服务指南走北(一):微服务是什么

微服务“Microservices”已经成为软件架构最流行的热词之一。网络上看到很多关于微服务的文章,但是感觉很多离我们还很遥远,并且没有找到多少真正在企业场景中应用的实例。此处省略一万字于...

gsying1474 ⋅ 2016/08/10 ⋅ 0

北达软微服务架构设计与实践圆满结束

2016年10月26-27日,为期两天的微服务架构设计与实践在北京大学成功举办。随着新一代信息技术的快速发展,业务需要快速变化、快速创新,互联网的连接带来了大的并发量和数据量。从单机架构走...

玄学酱 ⋅ 05/10 ⋅ 0

程序猿DD/SpringCloud-Learning

Spring Cloud教程 本项目内容为Spring Cloud教程的程序样例。如您觉得该项目对您有用,欢迎点击右上方的Star按钮,给予支持!! 我的博客:http://blog.didispace.com 我的小密圈(深度交流与...

程序猿DD ⋅ 2016/11/03 ⋅ 0

服务治理好文章{转}

微服务架构是由Martin Fowler在他这篇microservices博客中提出来的,与之对立的是monolithic架构。 monolithic架构概念 vs. 微服务架构概念 monolithic架构指的是应用被以单一单元构建。比如...

强子哥哥 ⋅ 2016/08/26 ⋅ 0

微服务架构实践总结

微服务架构是由Martin Fowler在他这篇microservices博客中提出来的,与之对立的是monolithic架构。 monolithic架构概念 vs. 微服务架构概念 monolithic架构指的是应用被以单一单元构建。比如...

优雅先生 ⋅ 2014/11/14 ⋅ 17

阿里巴巴前架构师 360 度无死角剖析微服务

摘要: 阿里巴巴前架构师对于微服务毫无保留的分享,360 度无死角剖析微服务 微服务是当前软件架构领域非常热门的词汇,在社区中也有很多热烈的讨论。因此,在 OSC 第 130 期高手问答中,我们...

yuanzhitang ⋅ 2016/11/28 ⋅ 0

阿里巴巴前架构师 360 度无死角剖析微服务

微服务是当前软件架构领域非常热门的词汇,在社区中也有很多热烈的讨论。因此,在 OSC 第 130 期高手问答中,我们策划的主题是“究竟什么才是微服务”,并邀请了黄勇作为高手嘉宾。 黄勇,现...

OSC源创君 ⋅ 2016/11/09 ⋅ 29

【开源访谈】腾讯刘豪:腾讯内部有 160 多个业务使用微服务架构

近几年,微服务架构由于其简单和灵活性,受到业内越来越多人士的青睐。目前对“微服务” 的架构风格并没有提供精确的定义,它的优势是什么?在技术选型上需要注意哪些问题?在企业中的应用程...

OSC源创君 ⋅ 2017/08/31 ⋅ 14

没有更多内容

加载失败,请刷新页面

加载更多

下一页

中标麒麟(龙芯版)7.0优盘安装

########################################## 制作U盘安装盘: 1.准备U盘: PMON环境下U盘必须格式化成ext3; 昆仑固件环境下可以格式化成ext3,ext4 2.把整个镜像 xxx.iso 复制到U盘下面 3....

gugudu ⋅ 19分钟前 ⋅ 0

老司机写的大数据建模五步走

本文将尝试来梳理一下数据建模的步骤,以及每一步需要做的工作。 01 第一步:选择模型或自定义模式 这是建模的第一步,我们需要基于业务问题,来决定可以选择哪些可用的模型。 比如,如果要预...

gulf ⋅ 28分钟前 ⋅ 0

PacificA 一致性协议解读

PacificA 的 paper 在 08 年左右发出来的,比 Raft 早了 6,7 年。 在 PacificA 论文中,他们强调该算法使用范围是 LAN (Local Area Network),讲白了就是对跨机房不友好。 不管是 ZAB,Raf...

黑客画家 ⋅ 31分钟前 ⋅ 0

盘符图标个性化

设置自己的专属盘符图标 准备ico格式的图片文件一个,在根目录下创建autorun.inf文件 文件内容 [Autorun]icon=logo.ico 重新启动或者插拔U盘即可看到结果...

阿豪boy ⋅ 31分钟前 ⋅ 0

Windows下QQ聊天记录中图片的默认存放位置

Windows下QQ聊天记录中图片的默认存放位置在设置中是没有说明的。 实测位置在:D:\Documents\Tencent Files\974101467\Image 其中: “974101467”为对应的QQ号; “C2C”为个人之间的聊天图...

临江仙卜算子 ⋅ 37分钟前 ⋅ 0

GC 的三种基本实现方式

参考资料《代码的未来》(作者: [日] 松本行弘)。 由于并非本人原著(我只是个“搬运工“),SO 未经本人允许请尽情转载。 另外个人像说明一下这里所说的GC指泛指垃圾回收机制,而单指Jav...

xixingzhe ⋅ 38分钟前 ⋅ 0

Android双击退出

/** * 菜单、返回键响应 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if(keyCode......

王先森oO ⋅ 42分钟前 ⋅ 0

idea 整合 vue 启动

刚学习Vue 搭建了一个项目 只能命令启动 Idea里面不会启动 尝试了一下修改启动的配置 如下: 1.首先你要保证你的package.json没有修改过 具体原因没有看 因为我改了这个name的值 就没办法启动...

事儿爹 ⋅ 48分钟前 ⋅ 0

redis在windows环境的后台运行方法

在后台运行,首先需要安装redis服务,命令为 redis-server.exe --service-install redis.windows.conf --loglevel verbose 启动,命令为 redis-server --service-start 停止,命令为 redis-...

程序羊 ⋅ 51分钟前 ⋅ 0

比特币现金开发者提出新的交易订单规则

本周,四位比特币现金的四位开发者和研究员:Joannes Vermorel(Lokad),AmaurySéchet(比特币ABC),Shammah Chancellor(比特币ABC)和Tomas van der Wansem(Bitcrust)共同发表了一篇关...

lpy411 ⋅ 55分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部