础架构研发


架构决策的依据:用现有的资源(人员,硬件,时间),做出满足现有业务需求的系统,系统的演进必须能适应业务后面的发展,这就要求系统的架构在设计之初就要尽可能的为后面的演进,在各方面都要做好铺垫,考虑的完备程度可能决定系统的生命周期的长短,影响IT的投入产出。


基础架构是对整个公司的基础库、基础软件、基础平台的架构与实现,为业务部门提供简单、方便、可靠、高效、可扩展的编程接口。基础架构的核心内容是什么?需要掌握什么技能?有怎样的特点?面对日益增长的用户,对基础架构的挑战又是什么?


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

Q

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

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

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

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



Q

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

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

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

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

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


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



Q

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

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

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


Q

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

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

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

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


Q

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

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

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

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

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


Q

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

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

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


Q

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

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

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


Q

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

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

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






推荐阅读 从零开始学做微信小程序,看这些就够了!

为何我暂停了维护 Python 社区的志愿者工作

15 款顶级开源人工智能工具推荐

那些适合日常使用的开源工具和应用(办公篇)

DB-Engines 11月全球数据库排行出炉,Oracle 霸主地位受威胁

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值