前言
本次《开源高校行第一期》直播活动由CCF主办、三位业界开源大咖带来分享,分别是LVS自由软件项目创始人章文嵩、2022 Apache软件基金会董事姜宁、OpenHarmony开源与开发者运营总监欧建深三位先生。而我们有幸作为OpenHarmony成长计划的学员参加了本次会议的直播,完会后自觉收获颇丰,有必要作一个总结性的梳理思考,因此,希望在投资自己的同时也具有供他人参考的价值。
议题分享
1、 从LVS项目说起与一点开源感悟
The Linux Virtual Server Project
分享会的第一项议题是章文嵩博士的《从LVS项目说起与一点开源感悟》。首先,大部分朋友在日常生活中可能很少听说过 "LVS" 这个名词,它是面向服务器端的一种负载均衡调度器,全称Linux Virtual Server,字面意思即Linux 虚拟服务器,类似的项目还有Nginx、HAProxy、F5、Keepalived等。其在官网The Linux Virtual Server Project中这样对其说明:Linux 虚拟服务器是一个高度可扩展和高度可用的服务器,构建在真实服务器集群上,负载均衡器在 Linux 操作系统上运行。服务器集群的架构对最终用户是完全透明的,用户之间的交互就像一个高性能的虚拟服务器一样。我们所熟知的百度、阿里、腾讯、Google、SourceForge等公司网站都有使用到这项技术,典型的场景就是淘宝双11上百亿购物额的订单量背后的支撑。
笔者以往也对LVS没有过具体了解,但基于以上分析,建立的初步感知是其思想与磁盘阵列技术有着大体上的异曲同工之妙。磁盘阵列通常称作RAID,中文意思是独立冗余磁盘阵列。RAID可通过软件或硬件技术将多个较小的磁盘整合成为一个较大的磁盘设备,而这个较大的磁盘功能不仅是存储,还具有数据保护功能;LVS是一台机器做网络服务忙不过来,所以拿一组机器来做,对外仍然相当于一台机器,其logo形象地传达出了这样一种特性。
LVS开源经过
章文嵩博士风趣地阐述了他从大学本科阶段一路走过来的历程与趣事,以下是简单的概括:
- 1995年底接触Linux,主要是玩,后在系统集成中应用。
- 1998年5月,LVS第一个版本发布,Linux kernel 2.0上的一个patch,只支持VS/NAT,实现Round-Robin调度算法,很简单。
- 实现了更多的调度算法,还有bug fix等。
- 1998年11月实现了VS/IPTunneling机制。
- 1999年5月实现了VS/Direct Routing机制,移植到Linux kernel 2.2。
- 更多的人参与LVS项目。
- 2000年5月开始移植到Linux kernel 2.4。
- 2002年9月开始移植到Linux kernel 2.5。
- 2003年10月收录到Linux kernel 2.5开发版。
- 2003年11月Linux kernel 2.4.23包含LVS。
- 2003年12月Linux kernel 2.6.0包含LVS。
- 2008年11月Google工程师帮忙实现了IPv6支持。
- 2010年2月实现了SCTP传输层协议支持。
- …
LVS也算一个全球协作的开源项目,汇聚了亚洲、欧洲、澳洲、美洲等全球各地的贡献者的成果。尽管大多数贡献者彼此之间都未曾谋过面,但基于相互的欣赏和共同的热爱与需求,LVS的能力得到不断加强,为后续的广泛应用奠定了坚实的基础,既满足了当代也造福了后世。也许,这就是开源精神核心灵魂之所在吧。
LVS既然有诸多优势,那么它在实际情况中该如何使用呢?
LVS在大型网站的用法
云计算里有两个叫地域和可用区的概念:地域是指物理的数据中心,资源创建成功后不能更换地域;可用区(Availability Zone,简称AZ)是指在同一地域内,电力和网络互相独立的物理区域。同一可用区内实例之间的网络延时更小。在同一地域内可用区与可用区之间内网互通,可用区之间能做到故障隔离。这里引用阿里云的相关实例供参考:
一个地域范围内通常是3个可用区,相邻的可用区之间两两相隔大概50-100公里,以应对容灾能力和网络延时的要求。
在一个可用区的结构内,其最前端是一个超级路由器Router,后端数据中心设置百十台左右的LVS服务器,背后再设置万台的Service Endpoint服务节点。然后,Router使用ECMP和Equal Cost Multipath算法,对源地址和目标地址IP做一个一致性Hash映射,将前端Router投射到后端LVS,以实现更细腻化的服务。
开源文化
章文嵩博士在阿里就职期间引入开源文化,推动了阿里的发展进程,2020年阿里发布了开源10年全景图:
可见,阿里因开源而受益,同时也提高了阿里的技术品牌和影响力。
开源在当今的商业服务中更是达成了三项一致性原则:
- 开源是更高效的开发模式。
- 开源带货是获客最高效的手段之一。
- 基础软件必须开源,不开源客户不敢用。
因此,对开源项目来说,建立竞争优势,就是要构建良好的开源开发者社区和开源生态。
最后,章文嵩博士分享了他对开源的一些感悟。这一部分,前辈一点一滴积攒的经历对我们小生来说是无比珍贵的滋养:
- 通过开源,可以得到更多用户,用户会帮助测试和反馈,最重要的是收集更多的客户需求。
- 通过开源,可以得到更多开发人员和高手的帮助,不断提高自己的能力。
- 通过开源,可以让自己的代码有更长的生命周期。
- 用户的用法,会超出我们自己的想象。
- 不要把开源想得太难,写了软件,开源了再说。
- 开源项目文档很重要,尤其是QuickStart。
- 发展开源社区,一定要把Credit给别人。
- 做开源项目是很好的经历,未来还有商业机会。
- 把东西做好,回报自然会来;平常心,享受过程。
大体上,笔者目前深有体会的是第2点和第8点——一个著名的开源项目社区中通常藏龙卧虎,各个节点都潜藏诸多高手,即通俗的“大佬”。例如OpenHarmony社区,简单分为运营岗和技术岗来说:运营大佬会高效地组织我们参与社区活动伴随相应的激励政策,激发学习热情,有时也会做一些思政工作的指引,个人成长的同时紧跟行业前沿;技术大佬则会提供硬核的技术指导,不厌其烦地为我们排疑解难,在力所能及的范围内给予帮助。其他几点还需笔者持续体会感悟,参与开源社区的优势远不止于此,能学到很多平常学不到的东西,有投入便会有回报。
2、 参与开源 拥抱世界
开源是什么
第二项议题是姜宁先生的《参与开源 拥抱世界》。从开源的源头说起,有三个重要人物发起了三项里程碑式事件,分别是Richard Stallman的 “自由软件运动” 、Linus Torvalds的 “Linux兴起” 、Eric Steven Raymond的 “开源软件运动”。
- Richard Stallman早年在MIT的人工智能实验室已经开发了许多软件,为了支撑这些项目的发展,成立了GNU Free Software Foundation(FSF)基金会并撰写了被后续广泛使用的GPL协议,倡导学习、使用、修改、分发软件的自由。
- 1991年Linux项目初版诞生,同样使用GPL协议,真正地把开源推动了起来。
- Eric Steven Raymond建立了open source initiative组织、发起了Debian Free Software Guidelines项目,现今的许多Deb系Linux发行版都基于Debian维护得到。
Apache软件基金会治理架构
Apache之道
- 公开透明。
- 精英之治。
- 共同体。
姜宁先生对Apache的核心理念作了以上三点概括并进行了相关解析。
精英之治
- 根据提出的最佳方案做决定方式。
- 才能是选择的唯一标准,而非地位、偏见或特权。
- 把权力交给那些具体干活的人。
- 功绩定义为实现项目目标所做的有价值的工作。
- 通过功绩来赢得相应的职位。
共同体
- 共同的兴趣、爱好。
- 需要有一定的场所进行交流。
- 大家扮演不同的角色:用户、开发者、布道师。
为什么要加入开源共同体。
- 可以学习到平时书本里学不到的知识。
- 可以帮助我们解决工作上的实际问题。
- 可以和一群志同道合的人一起成长。
- 可以和世界级的开发者一起工作。
- 工作会被更多人看到。
- 可以找到更好的工作或者更喜欢的工作。
开源共同体固然有许多理由值得我们加入,但姜宁先生强调到我们不能忽略阻挡自己的惰性,开源社区里的许多事物都是开放的,我们尤其需要培养自己的好奇心。
培养好奇心
- 好奇心是对新的事物有兴趣,想要探索、研究与学习的特质。
- 开源世界阻碍成长的是你的惰性,好奇心会帮你克服这样的惰性。
融入开源共同体
- 找到感兴趣的项目,培养好奇心。
- 围观开源开发记录,看问题是如何解决的。
- 参加开源项目实习活动。
- 找个项目做贡献成为committer。
融入集体是最快的进步方式,学习从来不是单打独斗,别人会犯的错误,我们通常也会犯,实践出真知,时间会给我们答案。
3、 看透开源 玩转开源项目
第三项议题是欧建深先生的《看透开源 玩转开源项目》。首先,欧建深先生把**“开源”**这一概念看作名词和动词两条主线来剖析:名词上理解开源,它是一种软件技术的承载方式(解构一个好产品,看优质技术哪里拿);动词上理解开源,它是一种构建生态的方式(起浪人如何掀起浪潮)。
开源从来不是一个单一的概念。英语中有一类词叫做动名词,其兼有动词和名词的特征,这使它能够在多种场合被应用,开源与其类似,强调的更多是全方位的变革。
名词
看透:找到顶级开源技术
如何找到顶级开源技术? 欧建深先生为我们指引了明确的路线:
- 从社区文章开始,边看文章,边建立与大家的共同语言。
- 学术池探索,随便看看,大把宝藏。
学术研究大概是下图这样一个过程:
其中,综述类论文是描述边界的工具,阐述一个领域最近正在发生什么事情、进行什么动作。
那么,综述既然这么专业,它是谁写的,在什么情况下写的呢?其实,它是一些行业泰斗为了获得学术上的突破而对本行业已知研究方向所做的统筹归纳。
从统筹归纳的全局视角结构切入必定比单点突破要有效的多,综述是学术研究开源技术的正确打开方式,只需加上关键词A survey of/on。
为了使大家具有一个更清晰直观的认识,欧建深先生举了相关实例:
分门别类型
这种是对各种技术整体架构的分类概括,就像高中一些理科学科的教辅,经常会有一些思维导图式的框架,一张图的背后藏着一本书。因此,顺着结构图走,基本上就能把某个领域的内容和研究方向摸透,达到与学术前沿齐平的水平。
结构原理型
这种是讲解各个技术配件之间是如何配合的,由于硬件或软件天生的结构特点造成存在某些问题,例如EROFS文件系统为什么要采用改造的固定输出大小LZ4算法,而不直接采用已有的LZ4,是因为Flash的存储节点是4k大小的扇区,为了实现4k对齐提高存储利用率,需要对原本的LZ4进行相应优化。
玩转:科研玩成短途旅程
用 “老子到此一游” 的轻松心情,看待复杂高难度的啃论文。
学术研究诚然平淡无味,但以一种“老子到此一游”的心态来玩,再冷酷无情的科研,也终将转变成轻松愉快的奋斗日记。
没有一项任务是轻易就能完成的,与其纠结工作难不难,不如调整自己去适应,这样,日积月累的过程中,我们也会慢慢地进步与成长。
动词
数学模型中的开源社区运营
开源社区运营体系中同样蕴涵着数学模型的对应,欧建深先生用了两本著作进行解析,感兴趣的读者可参考下方相关链接,具体内容这里不再展开。
万物皆数学,数学原理是自然界中潜藏的最大秘密,任何事物都能找到对应的数学模型去解释,搞懂了数学,就搞懂了万物。
总结
我们回顾了活动的绝大部分主体分享内容,从LVS项目到数学模型的应用,无不传达出巨大的信息量。温故而知新,笔者自己也有了新的认识。