LagomFramework介绍(一)
简介
lagom框架是由typesafe(lightbend)设计,针对于微服务架构的框架,诞生才仅仅一年,但是他的一些观点和思路确有其优势值得研究。本系列文章针对的是lagom的1.2.2版本和1.3beta,主要参考lagom的full doc,但是并不是翻译,想看官方说法的可以参考官方参考文档http://www.lagomframework.com/documentation/1.2.x/java/Home.html
核心观点
- lagom中的微服务
lagom对于自己的微服务的信息定义很明确,那就是一个服务做一件事情,每个服务能够独立自治。
这里的这种说法和框架的名字lagom(刚刚好)就不太搭调了,因为这对于一个项目来说可能并非最优选择。受制于各种外部因素,比如说服务器,团队规模,成本等等,一个刚刚好的拆分可能更加符合我们的实际需要。但是对于项目拆分的考虑来说这一步应该是一个优秀的业务拆分过程中重要的一步。
- 每个服务只完成一件事情
- 服务自治
- 服务只拥有自己的数据
常见观点不再赘述
- lagom对多语言的支持
设计上支持,暂不支持。
使用Http和websocket通信,同步通信使用HTTP,stream和异步消息使用websocket。消息序列化,默认使用JSON。
- lagom组件
lagom中大量使用了不可变量。例如在描述命令,事件,状态时,我们推荐使用第三方的不可变量库来定义不可变量。
对于不可变集合,推荐PCollection(http://pcollections.org/),当然guava也是可以的。
lagom服务鼓励持久化数据,但不强求。在使用事件溯源(Event sourcing)的架构时,这将会非常有效。在后面的时间溯源和CQRS部分会介绍lagom对于事件溯源的实现方式。
lagom使用了很多FP编程的内容,API要求java8。
lagom默认使用Cassandra作为数据库,绑定了一个默认的Cassandra server。
Lagom是在Play Framework上实现的。不过这些与微服务的实现细节不直接相关。 高级的用户可能希望直接使用一些Play API。
lagom使用了guice来做DI。使用Akka来处理持久化,发布订阅,以及集群。
lagom的配置使用的是typesafe config library,依据HOCON规范。