Akka入门系列(一):基本介绍

栏目: Scala · 发布时间: 5年前

内容简介:互联网系统的发展,大多数情况下都是业务倒逼的。发展过程不外乎以下几步:可以看到,如果要开发一个分布式系统,工程师要掌握的架构知识比较多,从基本的多线程到复杂的调度、容错、熔断、弹性、扩容等等复杂系统等等,任何一个环节出问题,都可能导致系统的不稳定。而

互联网系统的发展,大多数情况下都是业务倒逼的。发展过程不外乎以下几步:

  1. 最开始时,一个简单的MVC程序就可以,甚至是早期的J2EE也能得到很好的性能。
  2. 忽然某一天,系统压力大了,一些功能变得比较慢,这时会尝试去做代码重构优化,必要的地方开始使用进程内MQ以及线程池,开启异步及 多线程
  3. 再往后,单台也不能满足系统的吞吐了,这时就得上集群,前面一个 负载均衡 ,后面部署多台相同的服务器,将压力均衡到若干服务器上,甚至数据库都开始做切片。
  4. 再往后,继续优化,将一些压力大的功能单独提出来,做成一个 Service ,对外部提供服务,可以是REST,也可以是RPC,用这种方式来提高服务器利用率,毕竟有些业务只需要IO,而有些业务需要很强的CPU,根据实现逻辑不同,需要的物理资源也不同。而这时,简单的负载均衡也无法适用了,需要功能相对复杂的 网关总线 ,并且各种分布式下的难点都出来了—— 调度 、分布式 容错熔断弹性扩容 、分布式事务、灰度发布、 压力调整 等等。

可以看到,如果要开发一个分布式系统,工程师要掌握的架构知识比较多,从基本的多线程到复杂的调度、容错、熔断、弹性、扩容等等复杂系统等等,任何一个环节出问题,都可能导致系统的不稳定。而 Akka 简化了这一切:

  • Akka 屏蔽了 Java 的多线程和锁,转而使用 Actor 模型,一般的工程师可以在不了解如何优化Java多线程编程的情况下,也能实现非常高性能的系统
  • Actor 设计之初就天然满足了分布式,而且粒度较小,单机上可以跑上百万的 Actor
  • Akka 屏蔽了分布式集群中底层的通讯机制,对于开发者来说,只要根据业务写好 Actor 即可
  • Akka 直接提供了分布式下高可用、弹性、动态扩容的功能,无需再次开发

AkkaScala 编写,但同时提供了 ScalaJava API。或许 Akka 你没有听过,但 SparkFlink 这些当下流行的大数据分布式流式系统应当有所耳闻,它们的的底层,通通都在使用 AkkaScala 的作者 Martin Odersky ,就是 Akka 背后的公司 Lightbend (以前称为Typesafe)的创始人。 Lightbend 一直致力于提供基于Actor模型的分布式高性能 系统 ,而非仅仅只有分布式框架,旗下除了Akka,还有 Play (响应式Web框架)、 Lagom (微服务框架)、 alpkka (响应式集成中间件)。

AkkaSpring 区别

Akka 关注在高性能上, Spring 关注于 工具 集的整合和统一上

Spring 写出的代码(生产可用级),未必是高性能的(没说写不出高性能的),而 Akka 写出来的,基本上都是高性能。

利弊

好处

使用了 Akka 框架,你可以获得:

  • 无锁、无同异步编程和多线程编程,低成本(编码阶段)实现高性能,
  • 天然的并发系统和响应式系统,提供高吞吐和高并发服务
  • 直接获得容错系统,自由定义恢复、重置或关闭等操作
  • 简单的由单机扩展至分布式,核心业务代码几乎不用动
  • 文档齐全

并发和并行的区别

  • 并发是一个处理器利用时间切片处理多个任务
    想象电影院内的5台按摩椅,每次服务5-20分钟不等,一堆人等着坐,这个人下来那个人上。
  • 并行是多个处理器或多核的处理器同时处理不同的任务
    想象有N排按摩椅 ,每一排都可以服务一堆人。
    Akka是天然并发系统,但是并不能默认做到所有任务并行。特此澄清一下!

坏处

  • 上手难度高,学习路线陡峭
  • 中文文档少
  • 国内使用人少,遇到问题可请教或讨论的人少
  • 纯异步,调试起来比较麻烦
  • 第三方工具集少,添加进系统可能还需额外处理,缺少部分组件的整合的资料

使用方式

  • 作为一个独立程序单独启动
  • 作为一个lib集成到其他框架,如Spring里

提供的模组

Akka 主要提供了如下的组件(还有一些小的省略了):

  • akka-actor_2.12 核心框架
  • akka-remote_2.12 底层通讯模块
  • akka-cluster_2.12 集群模块
  • akka-cluster-sharding_2.12 集群分片功能模块
  • akka-cluster-singleton_2.12 提供集群单例功能的模块
  • akka-cluster-tools_2.12 集群特殊功能模块
  • akka-stream_2.12 流处理及流式编程模块
  • akka-camel_2.12 基于 Apache Camel 的实现模块,与各种接口进行通信
  • akka-agent_2.12 处理共享变量及原子操作的模块
  • akka-http_2.12 用于构建基础http服务的模块(注意,akka http不是web框架!)
  • akka-stream-kafka_2.12 kakfa的流式接口模块
  • akka-management_2.12 分布式集群管理模块
  • akka-testkit_2.12 单元测试模块
  • akka-slf4j_2.12 实现slf4j接口的日志模块
  • akka-persistence_2.12 用于保存数据、实现CQRS架构、实现EventSourcing的模块
  • akka-distributed-data_2.12 分布式数据保存模块,实现最终一致性

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

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

智能

智能

[法]弗雷德里克·马特尔 / 君瑞图、左玉冰 / 商务印书馆 / 2015-8 / 59.90

揭示数字化主流大趋势的最新权威论著 《主流》作者的最新力作!与法国秋季新版同步上市! 面对数字化时代的到来,美国、欧盟、中国、俄罗斯、印度、巴西、古巴、伊朗、南非、韩国、新加坡、肯尼亚、墨西哥、日本等世界各国各地区正在如何应对? 在国际地缘政治格局下如何把握数字化主流的大趋势? 谷歌、苹果、脸书、亚马逊、阿里巴巴、腾讯、中兴、华为等大家熟知的网络巨头接受了作者的采访。作者的......一起来看看 《智能》 这本书的介绍吧!

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

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

UNIX 时间戳转换

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

正则表达式在线测试