5
回答
【开源访谈】肖丁:如何做最懂业务的基础架构研发
【寻找人气王】邀新用户免费体验华为云服务,百元话费等你拿!   

基础架构是对整个公司的基础库、基础软件、基础平台的架构与实现,为业务部门提供简单、方便、可靠、高效、可扩展的编程接口。基础架构的核心内容是什么?需要掌握什么技能?有怎样的特点?面对日益增长的用户,对基础架构的挑战又是什么?本期,【开源访谈】邀请到了来自 UCloud 的基础架构研发部工程师肖丁,跟大家聊聊如何做最懂业务的基础架构研发。 

【本期嘉宾】
肖丁,基础架构研发部工程师,负责UCloud公共组件、监控、消息服务等系统,专注于高可用高性能框架、中间件应用。2014年加入UCloud,先后参与UCloud监控平台改造、内部DNS集群化、DB服务集群化、golang网络通信框架、通用agent等项目。OSC 源创会第55期广州站讲师。

【访谈实录】

1)首先介绍一下自己

我叫肖丁,来自上海 UCloud 云计算公司。大学本科的专业是航海技术 ,由于对计算机比较感兴趣,在大学后两年以及读研、出国留学选择的是计算机相关的专业。回国后加入 UCloud 云计算公司工作近 3 年的时间了。主要工作是负责公共组件,监控系统、基础架构以及消息服务的系统开发维护,消息服务具体来说就是消息队列、推送、订阅等方面的系统开发维护。期间还包括一些 DB、Agent、配置服务等中间件的开发。


2)为什么想要进入 IT 这个行业,做基础架构?

除了兴趣外。写代码会有一种成就感。大学的时候学的是航海技术专业,只有一门计算机的课程,由此产生了兴趣,通过编程,不管是实现算法还是系统都比较有成就感和满足感。

之后慢慢参与硕士,研究生的一些项目,由此对进入这个行业做好了准备。

从一个工程师的角度来说,不仅要会写代码,同时还要懂得去分析系统,完善系统,同时也要懂得怎么迭代。怎么以最小价值去实现一套系统,满足用户需求;同时系统升级时怎样能对用户影响减少到最低,这些都是对工程师的要求。


3)基础架构研发主要负责的工作内容是什么?必须掌握哪些基础技能? 

(1)基础架构主要的工作内容是提取用户的公共痛点,加以抽象,开发出一个公共服务系统,用以服务所有的研发人员。举个例子,在云计算公司,研发人员面对着几千甚至上万台大规模的服务器,各个业务部门在维护过程中会遇到一些困难,比如配置不一致,时常需要上线做一些配置的比对,临时的修复等,这给运维的人也带来很大的负担。

那么,基础架构的作用就是把统一配置功能抽象出来去服务各个业务部门。基础架构更多的是做一些有助于整体架构演进的公共服务系统,以中间件的形式存在,去帮助研发团队优化自身的系统。

(2)必须掌握的基础技能:基础架构首先要懂得分布式系统,因为需要去了解各个业务部门的系统,发现公共痛点,加以抽象并提供公共服务。

从整体架构来说,用户的接入层、中间件、核心业务代码、底层的存储方面的知识都要理解。相对来说知识需要更全面一点。

另外就是从旁路系统分析的话,日志分析、监控系统,运营系统也需要一些相关的知识。


4)做基础架构研发对个人哪些方面的能力提升较大?

首先是代码。基础架构部门需要快速高效地完成许多 Demo 去验证想法是否符合业务部门的需求。所以说在代码方面的成长是比较快速的。我们从C、 C++ 转到Golang 技术栈的转变,都是为了更好的去做一些工程化的事情。

另外就是对架构的理解。我刚进入公司时,在基础架构方面的知识几乎为零。当时我认为一个系统就是一个模块。模块可以直接完成所有的功能点,然后在底层多加一个存储 DB 就完成了整个架构。而在实际工作中,我发现一个线上服务是不断迭代的。它不仅包括存储,还包括单点容灾、跨机房容灾、系统升级灰度、监控运营以及整个系统的性能提升等。这方面的实践经验让我快速对架构有了更全面的了解。


5)在UCloud参与的几个项目当中,遇到最大的难点是什么?如何解决的?

公司在发展过程中如何快速的抢占市场,前提是要快速推出新的产品以满足用户的需求。印象特别深刻的就是我们也需要不断的向友商学习。

比如AWS 是全球知名的云计算公司了,整个产品线特别丰富。有一种情况,有些产品只有在 AWS 上有,在 UCloud 上及国内其它友商都没有对应的产品,但用户又有这方面的需求。这时最大的难点就是,我们不知道用户的需求是什么,也不知道系统的整体架构是怎么样的。我们不知 AWS 上对应的产品形态能否真实的解决用户的需求。此时,如果我们随意地做一套系统出来,但未必对用户是友好的。这时候我们的解决办法就是自己花时间不断去搜索,内部人员先试用,找客户接入,不断的评估,迭代。

还有需要考虑的是线上的一些问题。比如说,接手一个已有的系统,本身存在bug或者是对用户不友好的方面。如果用户提出系统问题,需要快速去定位,去修复 bug ,在此过程中还不能对用户产生影响。解决方法就是将用户请求调度到其它地方,然后灰度更新一些模块,异常时可将影响范围缩减到最小。


6)随着用户量的增长,企业对于基础架构的要求会随之提高,这过程要怎么保证稳定性?作为基础架构研发工程师,对公司业务和战略要有怎样的认知?

(1)保证稳定性主要是两种方式。横向的话是解决用户快速增长造成负载的问题。我们通过增加系统的加机器来把负载均摊来解决问题。纵向的话是优化系统。这方面对研发人员的要求比较严格。如从哪个层面解决并提升分布式系统远程调用的性能。比如从同步模式转换成异步模式,以提升整个分布式系统的性能。

其次需要考虑客户端的 SDK,主要是会增加重试、重连机制。也就是说用户在一次请求失败之后,SDK 中会启用重连机制,自动帮用户完成重新发送请求,以防止用户的请求失效。

其实,在保证稳定性上还有很多方面需要考虑。云计算公司要适应不同用户的业务场景,数据量在不断增长,对网络、存储的压力也会越来越大,这方面也需要不断去改进。

(2)说到战略,我觉得战略更偏业务,用户态。实际上基础架构更偏底层一点。我们更多关心的是如何让公司的研发效率去提升,怎样更好地去服务各个系统。


7)云计算企业的基础架构有怎样的特点?和传统IT公司架构最大的区别在哪?

与传统 IT 架构相比吧。首先,传统 IT 架构针对的是本身单一的一个业务形态,技术人员只需维护好自身的业务形态就行。但云计算不同,它是多种业务形态的,需要用相同的产品去搭建不同的架构,用以满足不同的需求。这对于云计算架构的挑战比较大。

同时,云计算作为一个服务级平台,需要考虑的非常重要的一点是更方便、快捷地服务用户,让用户更专注于核心业务。


8)对于像UCloud这种大规模企业级分布式系统及云计算平台的架构和研发方面,有哪些可以分享的经验?

我觉得做架构,实践是最重要的。要多去尝试,以最快的速度去实现最小的一个 Demo ,然后再进行测试。在测试环境里不断去验证。

研发方面,多增加与各个业务部门的沟通。了解他们的架构,包括基础架构,业务逻辑等。


9)在工作过程中,你觉得用户需求应该放在什么样的位置?

刚工作的时候,导师就和我说,要站在用户的角度思考问题。因此,用户的需求,思维方式对于云计算,公司的产品以及研发都是极其重要的一部分。如果我们在研发过程中不能满足用户的需求,做出来的系统即使再漂亮,再完美,其实也是没有任何价值的。

在研发过程中我们会时刻保持与用户的沟通。有专门的人员去做用户调研,了解用户使用过程中的痛点,在场景上或架构上的漏洞。然后将调研结果反馈到产品,通过产品再反馈给技术,形成一个闭环,不断地去修复,迭代的。

举报
凝小紫
发帖于2年前 5回/4K+阅
顶部