SOA及微服务概念
@ hanamichi · Saturday, Feb 1, 2020 · 4 分钟阅读 · 更新于 2月 4, 2020

云原生&软件设计架构的一些概念理解

云原生

cloud-native的关键词就是微服务

原生云cloud-native应用的定义是:

  • 应用系统应该与底层物理基础设施解耦。 应用程序应该与操作系统等基础设施分离,不应该依赖Linux或Windows等底层平台,或依赖某个云平台。也就是说,应用从开始就设计为运行在云中,无论私有云或公有云;
  • 应用必须能满足扩展性需求 垂直扩展(向上和向下)或水平扩展(跨节点服务器)。

SOA面向服务架构

SOA是一种思想,它是一个架构理念,强调服务共享和重用

微服务也指一种种松耦合的、有一定的边界上下文的面向服务架构

SOA是一种面向服务的单体架构,SOA是一种思想,它是一个架构理念,强调服务共享和重用

例1 (来自真实世界) :你去餐馆订餐,您的订单首先进入到柜台,然后在厨房进行食物准备,最后服务员提供的食物。因此,为了实现一个餐厅订购服务,您需要三个逻辑部门/服务协同工作(计帐,厨房和服务员)。在软件世界同样的方法称为业务服务。

例2 (软件世界) :你去亚马逊订购了一本书,有不同的服务,如支付网关,库存系统,货运系统等共同完成一本书的订购。

所有的服务是自包含的,合乎逻辑。他们就像黑盒子。总之,我们并不需要了解业务服务的内部工作细节。对于外部世界,它只是一个能够使用消息交互的黑盒子。例如在“支付网关”业务服务获得消息“检查信贷”后会给出输出:这个客户的信贷有或没有。对于“订单系统”,“支付网关”的服务是一个黑盒子。

SOA服务特点:

  • SOA组件是松耦合的。当我们说松耦合,这意味着每一个服务是自包含单独存在的逻辑。举例来说,我们采取了“支付网关”的服务,并将它附加到不同的系统。

  • SOA服务是黑匣子。在SOA中,服务隐藏有内在的复杂性。他们只使用交互消息,服务接受和发送消息。通过虚拟化一个服务为黑盒子,服务变得更松散的耦合。

  • SOA服务应该是自定义: SOA服务应该能够自己定义。

  • SOA服务维持在一个列表中: SOA服务保持在一个中央存储库。应用程序可以在中央存储库中搜索服务,并调用相应服务。

  • SOA服务可以编排和链接实现一个特定功能: SOA服务可以使用了即插即用的方式。例如,“业务流程”中有两个服务“安全服务”和“订单处理服务” 。从它的业务流程可以实现两种类型:一,您可以先检查用户,然后处理订单,或反之亦然。是的,你猜对了,使用SOA可以松散耦合的方式管理服务之间的工作流。

微服务架构

经过多年的SOA实践探索,人们已经发现服务的解耦性必须高于服务的复用共享性,因此催生了微服务架构。

微服务是指开发一个单个 小型的但有业务功能的服务,每个服务都有自己的处理和轻量通讯机制,可以部署在单个或多个服务器上。

微服务也指一种种松耦合的、有一定的边界上下文的面向服务架构。也就是说,如果每个服务都要同时修改,那么它们就不是微服务,因为它们紧耦合在一起;

微服务优点

  • 每个微服务都很小,这样能聚焦一个指定的业务功能或业务需求。
  • 微服务能够被小团队单独开发,这个小团队是2到5人的开发人员组成。
  • 微服务是松耦合的,是有功能意义的服务,无论是在开发阶段或部署阶段都是独立的。
  • 微服务能使用不同的语言开发。
  • 微服务允许容易且灵活的方式集成自动部署,通过持续集成工具,如Jenkins, Hudson, bamboo 。
  • 一个团队的新成员能够更快投入生产。
  • 微服务易于被一个开发人员理解,修改和维护,这样小团队能够更关注自己的工作成果。无需通过合作才能体现价值。
  • 微服务允许你利用融合最新技术。
  • 微服务只是业务逻辑的代码,不会和HTML,CSS 或其他界面组件混合。
  • 微服务能够即时被要求扩展。
  • 微服务能部署中低端配置的服务器上。
  • 易于和第三方集成。
  • 每个微服务都有自己的存储能力,可以有自己的数据库。也可以有统一数据库。

微服务缺点

  • 微服务架构可能带来过多的操作。
  • 需要DevOps技巧 (http://en.wikipedia.org/wiki/DevOps).
  • 可能双倍的努力。
  • 分布式系统可能复杂难以管理。
  • 因为分布部署跟踪问题难。
  • 当服务数量增加,管理复杂性增加

关于我

关于我

Hanamichi 的 ❤️ 博客

记录一些 🌈 生活上,技术上的事

全平台玩家(pc-steam, ps4, switch)

职业是后端工程师

正在努力学习

对云原生微服务感兴趣

主要的技术栈是:

  • golang
  • kubernetes
  • 微服务架构

略懂一二:

  • python
  • C/C++
  • java

学习中:

  • Rust
  • JavaScript

目前在 99cloud 工作

– 2021 年 2 月 1 日更新

2020年的计划

2021年的计划

现在回头看看,因为疫情和自身自律性原因,2020年的计划大多都没有实现

  • github issue和wiki记录平时的一些想法,坚持整理然后写入博客

  • 继续阅读 程序员修炼之道代码整洁之道

  • 关注云原声CNCF开源社区动态,争取做些贡献(平时还是太懒,自律性不强)

  • 以 java spring 生态继续研究架构的世界

其他

其他

如果你喜欢我的文章 or 我的项目,或者它们可以给你带来帮助。

You can buy me a coffee. ~

我的微信赞赏码

wechat

社交链接