区块链开发、区块链商城网站建设、区块链应用系统、物联网系统、数字货币交易系统、金融理财系统、汽车金融系统

开发现代分布式系统 - 第一部分:引导项目

时间:2019-01-16 浏览:

几个月前,我们的  性能和持续交付公会 决定获得更多分布式软件架构的实践经验。像Twitter或Netflix这样的公司已经从他们的软件堆栈中开源了许多组件,这似乎是一个好主意。一篇很好的介绍是关于Twitter软件堆栈的博客文章  。但是,我们不想盯着建筑图,而是自己弄脏手,自己建造一些东西。你还记得Java Pet Store  新的和花哨的美好时光  吗?我们需要类似于现代分布式架构的东西,最终决定构建流行程序员问答网站Stackoverflow的克隆 :Hash-Collision诞生了。使用Hash-Collision,我们希望解决分布式系统中的不同问题,例如:

  • 将应用程序分解为单个服务
  • 引导整个系统
  • 路由
  • 分布式服务通信
  • 服务之间的安全
  • UI集成

由于我们的实验室想法引起了对comSysto的浓厚兴趣,我们现在有多个团队在不同方面开展工作。在第一个实验室中,我们专注于运行一些简约服务。我们还决定将JVM作为所有服务的通用运行时环境,以利用相同的工具链并简化设置。但是,稍后我们可能会决定用一种不在JVM之上运行的语言来替换现有服务。

系统结构

我们将Hash-Collision分解为可以独立扩展的细粒度服务。系统被分解为这些垂直系统:

  • qa:处理由问题和答案组成的讨论。
  • user:处理用户数据管理
  • auth:处理凭据,身份验证和授权。

在这些服务之上是一个通过其(REST)API端点集成服务的UI: Hash-Collision的系统结构

服务

我们希望提供完全独立的服务,因此WAR部署不是一种选择。经过一番研究,我们偶然发现了  Spark, 并立刻喜欢它的简洁性。这是一个echo服务器:

import static spark.Spark.*; public class Echo { public static void main(String[] args) { get("/echo", (req, res) -> req.queryParams("msg")); } }

每个服务都提供域逻辑的某些部分,具有自己的数据存储并通过HTTP公开API端点。对于简单部署,它包含在一个JAR中,可以从命令行轻松启动。

服务沟通

为简单起见,我们暂时将HTTP作为API端点的通信协议。但是,在以后的版本中,我们可能会切换到像Thrift这样的二进制协议  。对于异步服务通信,我们使用  AMQP  和  Msgpack  编码。

路由

我们决定使用  Camel  为服务层实现基本的负载平衡和路由组件。服务实例由路由器动态注册。服务实例通过定期发送心跳消息来宣告自己,因此路由器可以跟踪正在运行的可用实例。但是,当服务实例刚刚死亡并且尚未从负载均衡器的节点列表中删除时,我们当前遇到可用性问题。

UI

哈希碰撞

在微服务中  :分解应用程序的可部署性和可伸缩性  Chris Richardson描述了UI集成的不同选项:其中包括直接从UI调用服务或使用API​​网关。虽然调用服务更容易开始,但它可能会很快变得笨拙和复杂。除此之外,客户端发出许多细粒度的HTTP请求,这会降低整体性能。虽然Hash-Collision由于实现时间限制而直接从UI调用服务,但我们绝对认识到API网关的好处,并将在稍后重新审视实现。

服务API和共享代码

在每个项目中都需要共享代码。德国零售商Otto的开发团队在一篇关于他们的商店架构(PDF)的文章中描述了   他们完全避免公司内部共享代码。相反,他们总是将这些代码作为开源项目发布并集成它们。由于共享代码量很小,Hash-Collision目前使用的是一个通用项目,该项目包含在各个服务模块的构建中。在后来的版本中,我们可以将开发周期分开,并可以将共享代码释放到内部Maven存储库中。服务API也需要共享代码。服务提供者和消费者共享一个通用API,它也包含传输对象。一些常见的方法是:

  • 代码重复
  • 共享接口描述语言文件和代码生成
  • 目标语言中的共享代码(客户端API)

结论和后续步骤

在本实验中,我们构建了一个非常简单的技术原型。特别是在操作方面,我们做了很多妥协,例如简单的本地构建或通过shell脚本进行配置。接下来,另一个团队将解决:

  • 持续提供服务
  • 使用Vagrant或Docker等工具进行配置和系统设置

发展方面,我们想解决:

  • 通过引入API网关减少客户端请求的数量
  • 启用分布式跟踪和监视,以了解请求如何流经整个系统
  • 提高  弹性
  • 添加实际服务持久性

随着我们改进Has​​h-Collision,请继续关注更多博客文章。

文章来源:紫隆科技
在线客服
热线电话
客服微信

紫隆科技2年服务500余家企业/单位!
联系电话 :15915385361
紫隆科技