大数据一直是技术社区的热门话题,是从事大型服务架构的攻城狮必修之课。node
岳鹰全景监控平台做为大数据应用系统,每时每刻都须要处理大量的日志流量,今天咱们将经过本文,为你们介绍岳鹰是如何打造大数据日志网关(简称网关),以知足如下需求:redis
QPS | 数十万 |
---|---|
日PV | 数百亿 |
流量带宽 | Gbps级别 |
日流量 | 数十TB |
RTT | <=40ms |
数据安全性 | 高 |
服务可用性 | 99.99% |
一个监控系统大体包括四个阶段:日志采集上报、日志存储、统计与分析、数据展现,具体以下所示 编程
归纳来讲,网关其核心设计要素主要有安全、高可用、大流量、高并发以及成本5大特性,以下图: 数组
做为一个对外暴露的服务,安全性一定是凌驾于一切之上的。除常见的物理层、网络层、系统层的安全防护之外,在应用层,咱们经过如下手段保证数据安全性: 缓存
除此之外,还有防刷判断、请求重复判断、限流熔断等一些列保障措施,这个后面会有专门文章解读,敬请期待...^v^!安全
可用性决定了整个平台的数据可用性(若垮掉整个下游都不会再有数据),所以须要有如下策略保证其服务可用性: 服务器
偶遇极端状况,还会呈几何级别上涨(想了解如何处理这种极端状况,请期待后面推文)。可见要解决这一问题,比“安全性”、“可用性”要困难的多。在说解决方案以前,咱们不妨先大概了解下整个上报的处理流程: markdown
核心(长耗时)的处理逻辑集中在“请求校验”、“业务处理”两个环节。当中又能够划分为“CPU密集型”和“I/O密集型”(小乌龟图标位置)操做。网络
网关并不是复杂运算形应用,针对纯CPU操做的优化其实很是有限。值得注意的是,现代主流的编程语言(如Java、Node等),其在逻辑运算能力上的差别通常不会很大(固然不一样技术有其特殊的优化手段),而在实际状况下,提高硬件性能、利用负载均衡这两个手段效果会最为明显。 架构
I/O操做通常都会比纯CPU/内存操做要慢得多,当中又要细分为本地I/O和网络I/O两种:
数据压缩上报——提升网络传输速度,减小带宽耗损。
合并上报——减小并发请求数,提高压缩质量。
分阶段请求处理——http请求处理其实是分多个阶段的(如Nginx就分了11个阶段),能够把大量用于校验的信息(该类信息一般比较小),经过http头部传输,并在header处理阶段完成校验操做;若检验失败就能够直接不处理报文体内容,这样能够减小非必要的流量处理,节省资源&提高效率。
跨系统调用——利用中间件代替直接的跨系统访问,拥有更高性能同时,下降性能不稳定风险。
高性能中间件选型——用Redis替代传统DB做为数据源、用Kakfa做为消息中转替代直接的下游系统访问。
多级缓存——把不常变的数据,利用本地->集群缓存->物理存储方式进行缓存,减小I/O操做及运算耗时。
数据缓冲 & 中转——在大数据分析处理的场景,咱们须要对数据进行不一样类型的加工处理(如统计、聚合、筛选、过滤等),若这些操做都在一次请求中完整处理,耗时会很是长。所以咱们使用异步缓冲机制,利用消息中间件对数据进行缓冲,并中转至下游运算,这样能够大大下降RT,提高TPS&QPS。
调整日志输出级别——上线后的应用,调整较低的日志输出级别(如error),能够减小本地磁盘的写入操做。
线性落盘——针对须要写盘的操做,能够统一写到全局缓冲区,而后用独立线程/进程进行落盘操做,减小不规律I/O操做。 固然以上的方案是须要根据实际状况权衡使用,如使用缓存会致使变化响应慢、使用线性落盘数据会有丢失风险等。 ##成本 做为一个如此大流量、高并发的产品,咱们须要承受各种硬件、网络、维护等的高成本投入(固然还有其它),所以在技术方案上,咱们必需要考虑这个因素:
硬件成本——如何提高同等级别设备下,单实例的运做效率。
网络成本——如何在不影响(小影响)性能效果下,下降网络资源耗损。
维护成本——如何经过更多DevOps工具(部署、测试、监控),减小人工成本投入。
人力成本——包括学习成本、实施成本、问题跟进成本。
..... #技术选型
基于 Nginx 与 Lua 的高性能 Web 平台(利用Nginx扩展机制,经过模块方式集成Nginx运行进程)
部署简单方便
专一超高并发、扩展性极高的动态 Web 应用、服务和动态网关
非堵塞I/O、协程同步模型(比较适合密集小文件I/O请求场景)
支持细粒度请求事件控制(结合上文说起的分阶段请求处理)
学习成本低,轻量级Lua脚本语言(与nodejs相像),支持JIT
有成功案例,也有同类应用场景案例
同时根据评测,在相同硬件环境、业务逻辑的前提下,OpenResty都会有比较明显的性能优点。
可是,它也有一些不足的地方:
正如上面说到,OpenResty原生的支持不算十分强大,为了更好的落地这个方案,咱们仍是作了必定扩展,包括:
说那么多,仍是来个图比较实际:
因为篇幅关系,大数据日志网关的介绍就到此为止,若你们想深刻了解更多内容,欢迎各位关注咱们,深刻讨论~(小编又要回去码代码了)。