这样一篇文章,主要是对自己近期所学重新梳理时,所做下的一篇笔记。
对MySQL近期所学的笔记,希望能帮助到一些人。
文章记录在notion中,点击下列查看
notion: MySQL学习
这样一篇文章,主要是对自己近期所学重新梳理时,所做下的一篇笔记。
对MySQL近期所学的笔记,希望能帮助到一些人。
文章记录在notion中,点击下列查看
notion: MySQL学习
这样一篇文章,主要是对自己近期所学重新梳理时,所做下的一篇笔记。
网络上已经存在大量对Eureka的介绍和原理剖析,不过这些文章存在很多重复雷同,对知识点总结不够清晰,对原理流程介绍又不够形象。本篇文章不算是完全原创,主要还是对这些文章的整理(见文末参考),对格式、内容有所删选,图片也来自不同的文章,在此感谢各个作者的分享。
Eureka 是 Netflix 出品的用于实现服务注册和发现的工具。 Spring Cloud 集成了 Eureka,并提供了开箱即用的支持。其中, Eureka 又可细分为 Eureka Server 和 Eureka Client。
处于学习netty的目的, 需要进行一些项目时间. 目前的工作暂时接触不到相关的内容, 所以考虑自己造一个项目.
目前网上已经有对应的项目了: Netty 入门与实战:仿写微信 IM 即时通讯系统, 花了几分钟看了一下, 似乎没有看到比较困难的点, 基本上就是实现了基础功能吧. 这篇文章主要介绍的还是netty的一些常用操作和属性, 适合我用来入门查看.
开新项目的目标:
任务安排:
本篇主要介绍task的创建与运行过程
拓扑会通过 Nimbus 分发给 supervisor, 那么 Nimbus 内部是怎么操作的?
这里以本地模式为例, 对拓扑的提交过程做一个分析.
参考资料:
理解storm拓扑并行度
对一个 topology,JStorm 最终会调度成一个或多个 worker,每个 worker 即为一个真正的操作系统执行进程,分布到一个集群的一台或者多台机器上并行执行。
而每个 worker 中,又可以有多个 task,分别代表一个执行线程。每个 task 就是上面提到的组件(component)的实现,要么是 spout 要么是 bolt 。
如上图所示, worker 是一个独立 JVM 的进程, 它其实是由 Supervisor 通过命令行执行 Worker#main 方法来启动. worker 进程内部, 运行着许多线程, 包括: Task 线程、序列化/反序列化线程等. 其对应的代码为: com.alibaba.jstorm.daemon.worker.Worker
注意: Storm 与 JStorm 的 worker 模型有所不同, JStorm 移除了 executor 的概念, 详见“JStorm 中 task 与 executor 的关系”.
“虽然池化和重用线程相对于简单地为每个任务都创建和销毁线程是一种进步,但是它并不能消除由上下文切换所带来的开销,其将随着线程数量的增加很快变得明显,并且在高负载下愈演愈烈。此外,仅仅由于应用程序的整体复杂性或者并发需求,在项目的生命周期内也可能会出现其他和线程相关的问题。”
摘录来自: [美] Norman Maurer Marvin Allen Wolfthal. “Netty实战。”
与 Netty 中的 EventLoop 类似, JStorm 中也建立了一套线程模型, 用于简化创建线程的过程, 并提高性能. 其具体的实现便是 AsyncLoopThread .
com.alibaba.jstorm.callback.AsyncLoopThread