文档章节

在Ignite上运行微服务:第一部分

李玉珏
 李玉珏
发布于 2016/12/15 23:29
字数 1552
阅读 1650
收藏 20

在Ignite上运行微服务:第一部分

从本文开始,会通过一个系列的篇幅来介绍使用Apache Ignite内存数据组织平台来构建容错、可扩展的基于微服务的解决方案。

介绍

当前,很多公司都会将自己的应用或者解决方案构建于微服务架构之上,这样做的主要好处是,可以将一个解决方案拆分为一组松耦合的软件组件(微服务)。这些软件组件可能有自己的版本以及生命周期,甚至有自己的开发团队。此外,这些软件还可能使用不同的语言和技术来开发和维护。但是因为所有的微服务都会是更大的构件(软件或者解决方案)的一部分,所以它们至少需要一个机制来进行彼此的交互和数据交换。

同时,基于微服务的解决方案也会用于高负载或者需要处理快速增长的数据的场景,因此和不是基于微服务的应用和解决方案一样,它也会面临同样的问题和困难。

  • 面向磁盘的数据库已经无法跟上快速增长的数据量,这些数据需要以并行的方式进行存储和处理,数据库正在成为整个应用或者解决方案的性能瓶颈;
  • 软件的高可用性保证作为一个好功能已经成为过去式,当前,应用的高可用性已经成为事实上的标配。

从本文开始,会通过一个系列的篇幅来一步步地介绍使用Apache Ignite内存数据组织平台来构建容错、可扩展的基于微服务的解决方案。

使用Apache Ignite的基于微服务的解决方案

下图会描述整个解决方案的主要构成,之后会深入,一个一个定义它们的角色。

1

Ignite集群层

集群有两个作用:

首先,作为主要的数据存储,它直接在内存中保存数据集。因为数据离CPU更近,一个微服务不需要从磁盘上获取数据,这显著地提升了整体的性能。从上图来看,我们指定了一个特定的集群组(数据节点)来专门处理这个问题。

一个数据节点是一个Ignite服务端节点,它持有数据集的一部分,并且可以执行查询和计算。另外,有赖于基于对象序列化的二进制格式化技术,一个数据节点不需要部署模型对象和计算的支撑类,这个叫做对等类加载机制,它可以管理从应用逻辑节点(服务节点)预加载的计算类。

其次,集群管理微服务的生命周期,并且为微服务配备所有必要的API,比如与其他服务或者数据节点进行通信的API。要达到这一点,一个基于Ignite集群的解决方案需要包含前述的服务节点,这些节点部署有微服务,并且应用逻辑也在这里执行。一个服务节点可以部署一个或者多个微服务,这个取决于具体的应用以及负载情况。每个微服务都需要实现Ignite的Service接口,它直接就有了容错和访问其他微服务的能力。

Ignite会处理在服务节点范围内,一个微服务的一个或者多个副本的部署,并且会自动地进行容错和负载平衡。在上述的图1中,这类微服务被命名为MS<N>(MS1,MS2等)。在多个服务和数据节点间传播负载的好处是,如果MS1微服务改变,不需要重启整个集群,所有需要做的就是在部署有MS1微服务的服务节点上更新MS1的相关类,因此只有所有节点的一个子集需要重启。

所有的节点(服务和数据节点)都是相互连接的,这使得部署在一个服务节点上的MS1可以与部署在任何其他的或者自身服务节点上的微服务进行通信,也可以向任何数据节点获取和发送数据以及计算。

持久化存储层

这一层是可选的,可以用于如下的场景:

  • 在内存中持有所有的数据是不必要或者不可行的;
  • 需要从基于磁盘的副本中恢复数据集的能力,这时整个集群需要停机或者需要重启。

要启用持久化存储层,只需要简单地提供一个实现了CacheStore接口的Ignite数据缓存就可以了。在默认支持的实现中,有RDBMS,MongoDB以及Cassandra。

外部应用层

这是微服务架构应用的"用户",基本上来说,这是一个触发调用一个一个微服务的各种执行流程的层次。

这个层可以使用具体到每个微服务的外部协议来与微服务进行通信(而在内部,微服务间相互通信可以使用Ignite服务,或者使用Ignite客户端连接进行连接),这方面都很大的灵活性以及多样化的选择。

未完待续

这个架构具有水平扩展的能力,可以在内存中保存数据集,微服务也具有高可用的特性。在以后的文章中,会通过一个示例来展示如何实现这个设计,敬请期待。

本文译自Denis Magda的博客

© 著作权归作者所有

李玉珏

李玉珏

粉丝 384
博文 78
码字总数 148142
作品 0
沈阳
架构师
私信 提问
加载中

评论(2)

李玉珏
李玉珏 博主

引用来自“fir01”的评论

其实我到是期望楼主能自己写个完整的demo来教育下我。
Ignite只能在服务层的治理上给出比较优雅的解决方案,但是业务上能不能成功进行微服务化改造,都不是取决于服务治理的,和业务场景,如何处理业务上的关联,代码的复用,数据一致这些是强相关的。
fir01
fir01
其实我到是期望楼主能自己写个完整的demo来教育下我。
在Ignite上运行微服务:第三部分

在Ignite上运行微服务:第三部分 这是关于如何在Ignite内存数据网格之上设计和实现微服务架构的系列文章的最后一篇,前两篇文章如下: 第一部分 整体介绍 第二部分 在在线环境中实现这个解决方...

李玉珏
2017/05/04
2.2K
4
在Ignite上运行微服务:第二部分

在Ignite上运行微服务:第二部分 本文是系列文章的第二篇,这个系列会详细描述如何使用像Ignite这样的内存数据网格(IMDG)技术来构建容错和可扩展的微服务解决方案。在第一篇中,作为一个系...

李玉珏
2017/01/23
1K
2
搭建第一个Ignite集群时的注意事项

开发者在搭建第一个Ignite集群时,常常会遇到各种障碍,社区在收集了各种常见问题后,整理了一份检查清单帮助开发者,总之,本文的目的是帮助开发者在一开始就搭建一个正常的集群,走在正确的...

李玉珏
03/27
1K
3
在Ignite中使用线性回归算法

在本系列前面的文章中,简单介绍了一下Ignite的机器学习网格,下面会趁热打铁,结合一些示例,深入介绍Ignite支持的一些机器学习算法。 如果要找合适的数据集,会发现可用的有很多,但是对于...

李玉珏
2018/11/22
257
0
Ignite 与 Spark 都很强,那如果把它们整合起来会怎样?

在前面的文章中,我们分别介绍了 Ignite 和 Spark 这两种技术,从功能上对两者进行了全面深入的对比。经过分析,可以得出这样一个结论:两者都很强大,但是差别很大,定位不同,因此会有不同...

编辑部的故事
2018/12/27
2.2K
1

没有更多内容

加载失败,请刷新页面

加载更多

3_数组

3_数组

行者终成事
今天
7
0
经典系统设计面试题解析:如何设计TinyURL(二)

原文链接:https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
今天
7
0
使用logstash同步MySQL数据到ES

概述   在生成业务常有将MySQL数据同步到ES的需求,如果需要很高的定制化,往往需要开发同步程序用于处理数据。但没有特殊业务需求,官方提供的logstash就很有优势了。   在使用logstas...

zxiaofan666
今天
10
0
X-MSG-IM-分布式信令跟踪能力

经过一周多的鏖战, X-MSG-IM的分布式信令跟踪能力已基本具备, 特点是: 实时. 只有要RX/TX就会实时产生信令跟踪事件, 先入kafka, 再入influxdb待查. 同时提供实时sub/pub接口. 完备. 可以完整...

dev5
今天
7
0
OpenJDK之CyclicBarrier

OpenJDK8,本人看的是openJDK。以前就看过,只是经常忘记,所以记录下 图1 CyclicBarrier是Doug Lea在JDK1.5中引入的,作用就不详细描述了,主要有如下俩个方法使用: await()方法,如果当前线...

克虏伯
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部