【IT168 资讯】日志,可以说是程序员最熟悉的一种数据结构了。网络设备、系统及服务程序等,在运作时都会产生一个叫log的事件记录;每一行日志都记载着日期、时间、使用者及动作等相关操作的描述。它存在于大家每天的工作中,是一组只追加,严格有序的记录序列。日志是一种很有效的数据结构,可用来解决很多分布式系统的问题。
在5月11日-13日,北京国际会议中心隆重举行的第八届中国数据库技术大会(DTCC 2017)——开源技术分会场上,Twitter消息组技术主管郭斯杰向大家分享了“Apache DistributedLog(分布式日志系统)的强一致性简化”。
▲Twitter消息组技术主管郭斯杰
郭斯杰毕业于中科院计算所,加入 Twitter 之前,就职于 Yahoo。专注于分布式消息中间件和分布式存储系统方向。同时,他也是Apache DistributedLog的联合创始人,Apache BookKeeper的PMC Chair。
郭斯杰先生在演讲中指出了目前分布式系统中存在的一些挑战:磁盘/服务器的年故障率高达10%、不可用、不一致以及Split-Brains(“脑裂”现象)。
脑裂现象指:本来一个大脑的两半球互相配合,变成了分裂成两个独立的大脑,都认为对方已死。在集群环境中,有这么几种可能造成"Split-Brain"现象:1、在集群环境中的节点间的心跳线同时断掉后,集群系统所处于的一种特殊状态。例如节点1和2组成一个集群,突然1和2间的心跳同时都断了,如果此前节点1正在运行应用,心跳都断掉后2开始去接管应用,强行加载数据,此时就是split-brain。2、集群中节点因为处理器忙或者其他原因暂时停止响应时,其他节点可能误认为该节点“已死”。后果:节点间争夺共享磁盘(即资源)的访问权,都对共享文件系统产生读写操作,从而导致共享磁盘文件系统损坏。
在谈到这些问题的解决办法时,郭斯杰首先表示,目前有一些算法的使用已获得了大家的共识,如Paxos、Zab、Raft……等等。但在此之后,仍有许多困扰。关于命令问题,哪种改变应该首先考虑?至于确定性,命令不会改变,甚至不会多次读取。还有一个问题是,如何保持复制日志的一致性?
为真正解决这些问题,郭斯杰向大家分享了Apache DistributedLog。该系统具有如下特性:
高性能。Apache DistributedLog可以在具有大量并发日志的持久写入中提供毫秒延迟,并且可以从数千个客户端处理每秒大量的读和写操作。
持久性和一致性。消息被持久化到磁盘上,并复制以存储多个副本以防止数据丢失。在严格的排序下,它们保证了写入者和读取者之间的一致性。
高效的扇入和扇出。Apache DistributedLog提供了一个高效的服务层,优化运行的多租户数据中心环境便或纱等。服务层能够支持大规模的读(扇入)和写(扇出)。
不同的工作负载。Apache DistributedLog支持各种工作负载,从那些对延迟敏感的联机事务处理(OLTP)应用程序(如分布式数据库和内存复制状态机),实时摄取和计算,到分析处理。
多租户。为了支持多租户的大量日志,Apache DistributedLog专为I/O在实际工作负载中隔离而设计。
分层体系架构。Apache分布式日志系统有一个现代的分层架构设计,它将无状态的服务层与有状态的存储层分离。支持大规模写入(扇入)和读取(扇出),允许扩展存储独立的CPU和内存。
▲Apache DistributedLog软件栈
▲日志流解析
在接受笔者采访,谈及Apache DistributedLog的未来规划时,郭斯杰先生表示也将顺应“时代趋势”走开源的路线。去年五月份,他们就已经将Apache DistributedLog开源,并且希望以开源的方式壮大社区,同时也在推动与如雅虎、百度等公司的合作,以期共同推动技术的进步,帮助他人更好地适应自己的应用场景。
最后,郭斯杰先生以一个互联网行业技术人员的身份,向广大的“同僚”们提出了自己关于职业发展方向的一些建议。郭斯杰认为,计算机领域是一个非常细分的领域,作为此领域内的人士,最重要的应该是抓住自己的兴趣点。如果对底层技术比较感兴趣,可以深入到其中,通过参与社区的方式去学习了解相关的底层技术。而对于上层技术比较感兴趣的人,则可通过参与开源技术锻炼自己的技术能力,提升自身水平。