SOA还是微服务?

在构建新的项目时应该总会考虑SOA或者微服务的方式。无论是新建还是重构。都请注意:考虑仍保持开放的选择不采取这种方法。在读完本文之后,关于是否建立多个小部件,你将会有一个更好的方法。

这篇文章是假定你有一些软件架构和服务方面的经验。我将谈一些微服务或SOA,同时在你的项目中该如何做。

是微服务?还是SOA?都用?都不用?

有人说,微服务与SOA差别很大。也有人说,微服务与SOA有相同点,但是是SOA的下一代,轻量级和less-enterprisey什么的。

 

完美构架不存在

你已经知道了没有完美的软件构架方法。Microsoavices可能不适合你的项目,甚至你的公司。什么是microsoavice呢?首先,我想说明这个两个简单的关键点:

  • 细粒度的责任
  • 内置的容错

他们是所有项目的基础,无论你的项目是大还是小。

 

细粒度的责任

Microsoavices可以是单任务或单个域。下面是一个单任务microsoavice的一个例子。

所有的项目不仅包括业务逻辑和应用领域。总有一些会涉及普通工具。我曾经在一个需要将RTF文件转换为HTML的项目。我们使用了一个库,这是很容易的。另一方面,在更新库时要求我们重新部署应用程序的所有实例。部署是自动化的,同时我们不需要发送新版本给客户,但是对于只有三个人的团队维护几十个实例是要花点时间的。

将相同库封装到一个独立的应用中然后去监听所有的HTTP请求,把它变成一个microsoavice是必要的。总之,从那天起,更新该库只是一个再部署一个单独的组件的事(只要API保持稳定)。

除了单任务microsoavices,还有足够多的用例覆盖应用领域,而不只是单一任务的。拿一个购物车的例子来说。

  • 添加商品到购物车
  • 删除商品
  • 更改商品数量

没有人为这些任务创建单独的服务认真考虑过,这就是为什么它是细粒度的。

 

内置容错

进程内的方法调用,与外部组件间的调用替换。最大的区别在于,外部调用更容易失败。它需要关注,但适当地考虑了它使整个系统更加稳定和容错设计。

容错真的是一个核心问题。早期把它弄对是microsoavices成功的关键。

 

问题

构建,部署和维护许多小的,独立的组件组成的系统也带来了许多的问题。你不仅要面对容错的问题,还包括这些问题:

  • 配置(我在哪里实现这一服务?)
  • 监控(提供哪些服务?)
  • 部署(多少实例吗?在哪些主机上运行它们)
  • 测试(在服务呼叫失败的情况下怎么办?)
  • 等等问题

测试和部署应该考虑到持续集成和部署工具可用。中央microsoavice环境的配置可能是一些可以通过使用一些ESB-like工具解决。

似乎有一切的解决方案,你只是不太满意。老实说,我认为我们没有完全到那一步,当涉及到的工具。将来会带来很多很好的工具,使构建,部署和维护microsoavices容易得多。

 

心态

从我自己的经验来看,我可以说microsoavice不只是关乎技术问题,这真的是还有一些关于心态问题。

如果你担心因为没有单一故障的服务增加的失败的概率,那么你可能需要重新考虑一下了。如果你看到那些小的组件帮助你降低失败的机率,你可能就能很快解决。

不要忘了你是一个开发人员。确保他们用mircosoavices的思想解决问题。我将在以后的工作中,microsoavices如何改变和提高开发人员的工作。

 

我的经验

我做软件开发近十年了。那段时间我的工作是不同类型的项目。我做了大约90%的网络用的东西Java和JavaScript,以及一些C#.NET,Visual Basic中(预DOTNET),Perl,PHP,Python等等,我做了几年的资深开发人员和架构师,也没遇到过一个人处理从开发到部署和维修的团队。

回想起来,我做了一些项目,一些人会从microsoavice方法中真正受益,一些人可能还没有。我做过一个必须用SOA的项目,非常的不实用,这就是为什么我想写的务实的话题,并从实用角度看待项目。

K8S中文社区微信公众号
分享到:更多 ()