微服务入门

微服务入门

微服务简介

“微服务”最初是由 MartinFowler 在 2014年写的一篇文章 《MicroServices》中提出来的。 关于 Martin Fowler 的介绍,维基百科上是这样描述的:

Martin Fowler,软件工程师,也是一个软件开发方面的著作者和国际知名演说家,专注于丽向对象分析与设 计、统一建模语言、领域建模,以及敏捷软件开发方法,包括极限编程。 主要著作有《可重用对象模型》《重构一一改 善既有代码的设计》《企业应用架构模式》《规划极限编程》 等。 ——Wikipedia

微服务定义

对于微服务,业界没有一个严格统一的定义,但是作为“微服务”这一名词的发明人,Martin Fowler 对微服务的定义似乎更具有权威性和指导意义 。 他的理解如下:

简而言之,微服务架构的风格,就是将单一程序开发成一个微服务,每个微服务运行在自己的进程中,并使用轻 量级机制通信,通常是 HTTP RESTFUL API。这些服务围绕业务能力来划分构建,并通过完全自动化部署机制来 独立部署。 这些服务可以使用不同的编程语言,以及不同数据存储技术,以保证最低限度的集中式管理。

微服务特点

结合以上的定义,微服务具有以下的特点:

  • 按照业务来划分服务,单个服务代码量小,业务单 一 ,易 于维护。
  • 每个微服务都有自 己独立 的基础组件 ,例如数据库、 缓存等 ,且运行在独立的进程中。
  • 微服务之间的通信是通过 HTTP 协议或者消息组件,且具有容错能力。
  • 微服务有一套服务治理的解决方案,服务之间不相合,可以随时加入和剔除服务。
  • 单个微服务能够集群化部署,并且有负载均衡的能力。
  • 整个微服务系统应该有一个完整的安全机制,包括用户验证、权限验证、资源保护 等。
  • 整个微服务系统有链路追踪的能力。
  • 有一套完整的实时日志系统 。

微服务的不足

  • 微服务的复杂度
  • 分布式事务(CAP理论,AP系统)
  • 服务的划分
  • 服务的部署

微服务的功能

服务的注册与发现

服务注册士在指向服务注册中心注册一个服务实例,服务提供者将自己的服务信息(如服务 名、 IP 地址等〉告知服务注册中心。服务发现是指当服务消费者需要消费另外一个服务时, 服务注册中心能够 告知 服务消费者它所要消费服务的实例信息(如服务名、 IP 地址等〉。通常 情况下, 一个服务既是服务提供者,也是服务消费者。服务消费者一般使用 HTTP 协议或者消 息组件这种轻盘级 的通信机制来进行服务消 费。

服务的负载均衡

在微服务架构中,服务之间的相互调用一般是通过HTTP通信协议来实现的。网络往往具有不可靠性,为了保证服务额高可用(High Availability),服务单元通常集群化部署。

一般都会讲服务提供者和服务注册中心进行集群化部署,来实现负载均衡。

服务的负载

服务的容错

为了解决分布式系统的雪崩效应,分布式系统引进了熔断器机制。

当一个服务的处理用户请求 的失败次数在一定时间内 小 于设定的阀值时,熔断器处于关闭状态,服务正常 : 当服务 处理用 户请求的失败次数大于设定 的阀值时,说明服务出现了故障,打开熔断器,这时所有的请求会执行快速失败,不执行业务 逻辑。当处于打开状态的熔断器时 , 一段时间后会处于半打开状态,并执行一定数量的请求 , 剩余的请求会执行快速失败,若执行的请求失败了,则继续打开熔断器;若成功了,则将熔断器关闭 。

熔断器机制

服务网关

微服务系统通过将资源以 API 接口的形式暴露给外界来提供服务。在微服务系统中, API 接口资源通常是由服务网关(也称 API 网关〉统一暴露,内部服务不直接对外提供 API 资源 的暴露 。 这样做的好处是将 内部服务隐藏起来 ,外界还以为是一个服务在提供服务,在一定程 度上保护了微服务系统的安全。 API 网关通常有请求转发的作用 , 另外它可能需要负责一定的 安全验证,例如判断某个请求是否合法,该请求对某 一个资源是否具有操作权限 等。通常情况下,网关层以集群 的形式存在 。在服务网关层之前,有可能需要加上负载均衡层,通常为 Nginx 双机热备,通过一定的路由策略, 将请求转发到网关层。到达网关层后,经过一系列的用户身 份验证、权限判断, 最终转发到具体的服务。具体的服务经过一系列的逻辑运算和数据操作, 最终将结果返回给用户 。

服务网关架构图

服务配置的统一管理

服务配置统一管理的架构图如下:

服务配置统一管理

服务链路追踪

微服务系统是一个分布式架构的系统,微服务系统按业务划分服务单元, 一个微服务系统往往有很多个服务单元。由于服务单元数量很多且业务复杂, 服务与服务之间的调用有可能非常复杂, 一旦出现了异常和错误,就会很难去定位。所以在微服务架构中,必须实现分布式链路追踪,去跟进 一个请求到底有哪些服务参与,参与的顺序又是怎样的,从而使每个请求链路清晰可见,出了问题很快就能定位。

原文地址:http://wangjinlong.xyz/2018/09/08/intro-to-micro-service/

参考资料:《深入理解Spring Cloud与微服务构建》——方志明

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏linux驱动个人学习

硬盘写到一半时断电,文件系统里会发生什么?

知乎问题: 断电时文件系统发生了什么?硬盘又发生了什么?下一次开机时写到一半的文件在系统层面还在吗?在底层还在吗? 更进一步的, 文件系统如何保证事务性, 会不...

32140
来自专栏云计算

云自动化:WinRM和SSH

[最初由Barak Merimovich撰写的文章]

34690
来自专栏黑白安全

Memsniff:一款开源的Memcached流量分析工具

在<span "="">知名在线资源存储网站Box上,我们看到云服务已经经历了从一小撮应用服务器和数据库到高规格、高性能协作平台的转变。像大多数大型网络公司一样...

12430
来自专栏纯洁的微笑

本周新鲜事:开源那些事

11020
来自专栏IT大咖说

聊聊容器调度框架,看又拍云如何基于mesos实现

摘要 为了更好地完成云处理服务的负载均衡, 零停机升级, 自定义策略调度等功能, 又拍云用 Go 实现了自己的容器调度框架, 管理长期服务和定时任务。 嘉宾演讲...

455110
来自专栏FreeBuf

深入解析Cookie技术

0×00 引言 在Web技术的发展史上,Cookie技术的出现是一次重大的 变革。但是, Cookie技术又是一项非常有争议的技术,从它诞生之日起就成了广大网络...

233100
来自专栏码神联盟

碎片化 | 第四阶段-36-struts-spring结合jdbc实现删除功能-视频

如清晰度低,可转PC网页观看高清版本: http://v.qq.com/x/page/z05669dznu6.html ---- 结合jdbc实现删除功能(...

36890
来自专栏IT技术精选文摘

聊聊C10K问题及解决方案

1 C10K问题 大家都知道互联网的基础就是网络通信,早期的互联网可以说是一个小群体的集合。互联网还不够普及,用户也不多。一台服务器同时在线100个用户估计在当...

71890
来自专栏张戈的专栏

分享一个支持https的CDN及启用SSL后续问题汇总

之前张戈博客全站启用了 https,并分享了相关经验心得。用了一段时间,问题还是不少,所以继续整上一篇文章,汇总一下网站启用 https 之后出现的问题以及解决...

5.9K70
来自专栏人人都是极客

聊聊Linux IO(中)

结合这个图,想想Linux系统编程里用到的Buffered IO、mmap(2)、Direct IO,这些机制怎么和Linux IO栈联系起来呢?上面的图有点复...

80120

扫码关注云+社区

领取腾讯云代金券