深入到骨子里的分布式和微服务化编程语言

栏目: 后端 · 发布时间: 6年前

内容简介:分布式和微服务化,已经大行其道很久了。现在很多项目动不动就说做成微服务,不管不顾自己的项目性质,和相应的工具链支持。关于微服务,我还是很喜欢 Martin Fowler 大叔在my primary guideline would be微服务最基本,最核心的点是什么?服务切分。一个能很好切分服务的架构师,即便是让他用 Monolith 的方式搭建系统,模块的划分也应该是很清晰的。

分布式和微服务化,已经大行其道很久了。现在很多项目动不动就说做成微服务,不管不顾自己的项目性质,和相应的 工具 链支持。关于微服务,我还是很喜欢 Martin Fowler 大叔在 MicroservicePremium 里说的:

my primary guideline would be don’t even consider microservices unless you have a system that’s too complex to manage as a monolith.

微服务最基本,最核心的点是什么?服务切分。一个能很好切分服务的架构师,即便是让他用 Monolith 的方式搭建系统,模块的划分也应该是很清晰的。

那么,假如你手上拥有的已经是 JAVA 界当前开发效率最高,开发约定最统一的 Springboot 实现的一个 Monolith 系统,如果要把它分隔为几个独立的服务,你觉得会有多简单?除了复制一些配置,切分新建几个 Application 这些体力活外,模块间的通信方式则可能需要有很大的改变。原来的 Java 代码调用,现在可能要改成 http 接口,grpc 等,即便不需要对外提供服务。

在 Elixir 里,如果规划的好,模块的切分一开始就通过 GenServer 等使用消息传递的方式来调用,后期的微服务化简直就是拆一下文件目录就差不多了,并不需要再大费周章改接口,统一数据传输格式等。Elixir 的 Node 节点注册,Process 注册、管理和通信,为打造微服务化和分布式的系统提供非常好的支持。

更难得的是,Elixir 坐拥了 Erlang 传承的宝藏,一篮子的工具库,让代码,服务间的调用和监控变得非常容易。这一套工具可以说是历经几十年产品线上磨练的官方套件,不必像其它语言那样到处搜罗组装开源工具,或者自研。

比如,我现在只是实现一个计数器,你每次可以向它获取下一个可用的数字,它会一直自增下去。如果你不想每次自增的间隔是 1,那可以设置其它间隔。

这么简单的一个应用,可以算是一个微服务了吧?我们还可以怎么把它切分为更细的服务吗?我们还可以把它分成三部分:

  1. 实现自增,和间隔设置逻辑的业务服务
  2. 保存数据状态的服务
  3. 监控这两个服务的 Supervisor 服务,假如业务逻辑出错,负责重启

下面这幅图应该基本可以说明整个应用是如何运作的了。

深入到骨子里的分布式和微服务化编程语言

你可以看到,如果我把自增的间隔故意设置为非数字,导致服务意外退出,背后的 Supervisor 服务会将它悄悄的重启,并按照编写好的逻辑,把 Server 的内部状态数据保存到数据服务,以便重启时读取。等我重新设置一个正确的数字自增间隔后,就可以接着获取新的号码了。

在 Elixir 的交互控制台 iex 下,敲入 :observer.start() 这个命令,就可以监控整个系统的运行状态,包括有哪些 Application,哪些 Process,Application 内存使用情况,内部数据状态(State)等。

深入到骨子里的分布式和微服务化编程语言

深入到骨子里的分布式和微服务化编程语言

深入到骨子里的分布式和微服务化编程语言

总的来说,Elixir 的消息调用机制,Application 的组织方式,Process Supervision 和节点的架构方式,丰富的系统工具,真的是从骨子里散发出微服务的光芒。数据的 immutability 更是让分布式数据处理更安心,不用担心一些不必要的多线程问题。

Elixir 的作者 José Valim,在 Elixir in times of microservices 这篇文章中介绍更清楚详细,推荐一读。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

RabbitMQ实战

RabbitMQ实战

Alvaro Videla、Jason J. W. Williams / 汪佳南 / 电子工业出版社 / 2015-10 / 75.00元

本书对RabbitMQ做了全面、翔实的讲解,体现了两位专家的真知灼见。本书首先介绍了有关MQ的历史,然后从基本的消息通信原理讲起,带领读者一路探索RabbitMQ的消息通信世界。这当中不仅包含了针对单台RabbitMQ服务器和RabbitMQ集群的讲解,还教导读者如何使用各种工具来进行监控。 本书内容浅显易懂,文笔风趣幽默。书中包含了丰富的、可以运行的示例程序源代码,读者可以自行下载并运行,......一起来看看 《RabbitMQ实战》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试