Web Server
Nginx
- 《Ngnix的基本学习-多进程和Apache的比较》
- Nginx 通过异步非阻塞的事件处理机制实现高并发。Apache 每个请求独占一个线程,非常消耗系统资源。
- 事件驱动适合于IO密集型服务(Nginx),多进程或线程适合于CPU密集型服务(Apache),所以Nginx适合做反向代理,而非web服务器使用。
- 《nginx与Apache的对比以及优缺点》
- nginx只适合静态和反向代理,不适合处理动态请求。
OpenResty
- 官方网站
- 《浅谈 OpenResty》
- 通过 Lua 模块可以在Nginx上进行开发。
Apache Httpd
消息队列
- 《消息队列-推/拉模式学习 & ActiveMQ及JMS学习》
- RabbitMQ 消费者默认是推模式(也支持拉模式)。
- Kafka 默认是拉模式。
- Push方式:优点是可以尽可能快地将消息发送给消费者,缺点是如果消费者处理能力跟不上,消费者的缓冲区可能会溢出。
- Pull方式:优点是消费端可以按处理能力进行拉去,缺点是会增加消息延迟。
- 《Kafka、RabbitMQ、RocketMQ等消息中间件的对比 —— 消息发送性能和区别》
消息总线
消息总线相当于在消息队列之上做了一层封装,统一入口,统一管控、简化接入成本。
消息的顺序
RabbitMQ
支持事务,推拉模式都是支持、适合需要可靠性消息传输的场景。
RocketMQ
Java实现,推拉模式都是支持,吞吐量逊于Kafka。可以保证消息顺序。
ActiveMQ
纯Java实现,兼容JMS,可以内嵌于Java应用中。
Kafka
高吞吐量、采用拉模式。适合高IO场景,比如日志同步。
Redis 消息推送
生产者、消费者模式完全是客户端行为,list 和 拉模式实现,阻塞等待采用 blpop 指令。
ZeroMQ
TODO
定时调度
单机定时调度
- 《linux定时任务cron配置》
- 《Linux cron运行原理》
- fork 进程 + sleep 轮询
- 《Quartz使用总结》
- 《Quartz源码解析 —- 触发器按时启动原理》
- 《quartz原理揭秘和源码解读》
- 定时调度在 QuartzSchedulerThread 代码中,while()无限循环,每次循环取出时间将到的trigger,触发对应的job,直到调度器线程被关闭。
分布式定时调度
- 《这些优秀的国产分布式任务调度系统,你用过几个?》
- opencron、LTS、XXL-JOB、Elastic-Job、Uncode-Schedule、Antares
- 《Quartz任务调度的基本实现原理》
- Quartz集群中,独立的Quartz节点并不与另一其的节点或是管理节点通信,而是通过相同的数据库表来感知到另一Quartz应用的
- 《Elastic-Job-Lite 源码解析》
- 《Elastic-Job-Cloud 源码解析》
RPC
- 《从零开始实现RPC框架 - RPC原理及实现》
- 核心角色:Server: 暴露服务的服务提供方、Client: 调用远程服务的服务消费方、Registry: 服务注册与发现的注册中心。
- 《分布式RPC框架性能大比拼 dubbo、motan、rpcx、gRPC、thrift的性能比较》
Dubbo
** SPI ** TODO
Thrift
- 官方网站
- 《Thrift RPC详解》
- 支持多语言,通过中间语言定义接口。
gRPC
服务端可以认证加密,在外网环境下,可以保证数据安全。
数据库中间件
Sharding Jdbc
日志系统
日志搜集
配置中心
- Apollo - 携程开源的配置中心应用
- Spring Boot 和 Spring Cloud
- 支持推、拉模式更新配置
- 支持多种语言
- 《基于zookeeper实现统一配置管理》
- 《 Spring Cloud Config 分布式配置中心使用教程》
servlet 3.0 异步特性可用于配置中心的客户端
API 网关
主要职责:请求转发、安全认证、协议转换、容灾。
- 《API网关那些儿》
- 《谈API网关的背景、架构以及落地方案》
- 《使用Zuul构建API Gateway》
- 《Spring Cloud Gateway 源码解析》
- 《HTTP API网关选择之一Kong介绍》