我的“技术架构”之旅

author author     2022-10-01     104

关键词:

导言:很久没写过涉及技术的文章了,因为进行职业转型后对技术有种很纠结的心态。热爱——每每看到五颜六色的代码窗口就会心里发酸,想起曾经那是生活中的一份灿烂心情;不自信——这么久离开技术会不会已经落后生疏(虽然一直没有脱离技术的学习与参与,但是失去了一线写代码的实践)。今天恰好去参加AWS(亚马逊云服务)的一个区域讨论会,一位亚马逊的架构师在为大家讲解AWS云服务及一些案例的架构设计,很多熟悉的概念,还有这位架构师的谦逊和真实,一切是那么亲切。所以心血来潮,想回顾一下自己做架构的职业之旅。




本想自己定义一下架构设计的要点,发现百度百科中总结的就很好“系统架构既需要掌控整体又需要洞悉局部瓶颈并依据具体的业务场景给出解决方案,并能把各种目标需求进行不同维度的扩展。”提炼一下:

  • 熟悉业务:技术本身是无“价值”的,要落地到具体的使用场景中为客户/用户解决问题。

  • 掌控整体又要洞悉局部瓶颈:我们时常要对技术实现进行优化、时常要解决各种bug,但是正如“过早优化是万恶之源”这句话的深刻含义一般,我们应该在明晰全局的基础上再去确定需要解决哪个局部问题。

  • 不同维度的扩展:面对不断变化,灵活性与可扩展性是我们进行架构设计所追求的目标。

这是一些做架构的核心要点,其中还有很多其他的点。看看我的点滴领悟。


第一阶段:外包生涯

作为技术人员仿佛会本能的排斥去做IT外包的工作,仿佛这样就会成为IT界“蓝翔”的代言人。其实做外包人员并不意味着低端和无成长性,特别是对于在一些有着严格规范和标准的外包企业中,有对代码规范和文档注释的要求;由于只需要做业务中一块,这就要求把业务功能和接口设计的足够分离。正是这段经历让我形成了规范的代码习惯和有了功能接口化、模块化的思维。

参考:华为代码规范文档;书籍—《代码大全》


第二阶段:研发单机软件

这是自己第一次独立负责研发一款软件,开始接触客户了解业务,然后诉诸于代码实现。在这个过程中有一个印象极深的片段,接手的代码有一个长达千行的函数,代码命名随意也没有注释,看得我云里雾里。最后导致自己付出了大量的时间,包括利用debug工具一行行跟代码才了解清楚业务逻辑,心里默默地走了数百遍的草泥马。随后我便用第一阶段养成的好习惯开始进行众多功能的分割,把这个千行的庞然大物分离成一个个套用的小函数,另外在代码(命名和注释)上进行规范,不但利于自己后期的维护,我想也不至于难为下一个接手的研发人员。在这段经历中,我开始有了把一些工具函数抽出来写成工具类的意识(这期间还看了很多开源的代码,从其中抽出不少工具函数)。另外一个重点,就是对单一程序插件机制的利用,比如可以灵活的调节界面展现元素,利用程序的动态加载机制(动态库)来对程序进行局部升级和逻辑改变。

参考:snort和 tcpdump的源码充分实践了程序的插件机制;博客文章—《提高工作效率的工具“类”》


第三阶段:Client/Server端编程

C(B)/S架构意味着开始接触网络编程、web编程。这个阶段对自己影响最大的应该是分层的思想。网络协议栈分层的精妙设计和java SSH框架的使用都深深影响了自己,比如自己一个即时聊天系统的架构设计就充分使用了分层的思想,包括后期使用分层的思想搭建了一些业务无关的技术平台,便利了自身也充实了公司的技术货架。

参考:博客文章—《IM系统架构设计之浅见》,技术平台源码github—高性能TCP网络服务器程序基于TCP协议的远程过程调用框架客户端实现


第四阶段:转向Linux系统、服务端编程

2011年时随着互联网/移动互联网的风暴愈加狂烈,90%以上的后端服务都是Linux承载,客户端技术又太碎片化,所以自己提前预判,将自己的技术栈从Windows全面转向Linux,从客户端转向服务端。如果说自己的架构生涯里转折点只能选一个,我会选这个阶段。Linux体系和windows就是两种不同的文化,其中《Unix编程艺术》这本书可以说是我的精神导师,我阅读了不下四遍。书中的很多思想都成为我今后做架构的依据和准则,比如“模块原则:使用简洁的接口拼合简单的部件;分离原则:策略同机制分离,接口同引擎分离......”,浓缩成一个词一句话“KISS——Keep It Simple,Stupid!”。当Martin Fowler 与 James Lewis 还未提出微服务的概念时,依据这些思想我已经做了很多微服务的设计和实践。

参考:博客文章—《三读《UNIX编程艺术》——UNIX哲学》  《服务端架构中的“网关服务器”》


第五阶段:搭建互联网平台级产品

这个阶段因为自己的角色已经不仅仅是个技术人员,而且已经深入到业务和产品设计以及运营中去。这时的思路是一定要以业务指导架构设计,我们不可能考虑全面所有事,架构可以随着业务发展慢慢演化。但此时的架构范畴已经不单单是某个程序的架构,而是技术选型、架构设计、性能优化、 安全、系统发布、运维监控、业务数据分析等对整个业务链的支撑。

参考:待总结(包含移动APP,智能硬件、web开发、数据库、云服务、高并发等等)




以上就是今天心血来潮的一些主要节点的回忆,其实还有很多的点点滴滴,正是由于这些点滴构成了自己的技术思想和职业生涯。敬曾经作为技术人员的自己,敬所有还在技术岗位的程序猿兄弟美眉们。


本文出自 “永远的朋友” 博客,请务必保留此出处http://yaocoder.blog.51cto.com/2668309/1982646

wcf学习大全

我的WCF之旅(1):创建一个简单的WCF程序我的WCF之旅(2):EndpointOverview我的WCF之旅(3):在WCF中实现双向通信(Bi-directionalCommunication)我的WCF之旅(4):WCF中的序列化(Serialization)-PartI我的WCF之旅(4):WCF中的序列化(Seria... 查看详情

我的opengl学习进阶之旅学习opengles3.0的实战awsomedemo(中)

上一篇文章【我的OpenGL学习进阶之旅】学习OpenGLES3.0的实战AwsomeDemo(上)介绍了一下项目和部分案例效果展示,这篇接着介绍其他的案例效果展示。三篇完整版链接:【我的OpenGL学习进阶之旅】学习OpenGLES3.0的实... 查看详情

我的gradle安装探索之旅

...://gradle.org/docs官方给出了这么贴心的文档我绝对尝试搭建我的环境。 1第一步安装  这是教我们安装给出的内容 以下为翻译内容 预备知识 Gradle运行在所有的主流操作系统需要安装JDK或者JRE 7或以上版本&... 查看详情

我的编码之旅

我的编码之旅​大学专业是软件工程,第一次接触编程是冯老师(教授)的C语言,对枯燥的代码很是头疼,实验课前的理论课讲的真是让人昏昏欲睡,那都是啥啊,没有漂亮的界面只有控制台的简单输... 查看详情

我的编码之旅

我的编码之旅​大学专业是软件工程,第一次接触编程是冯老师(教授)的C语言,对枯燥的代码很是头疼,实验课前的理论课讲的真是让人昏昏欲睡,那都是啥啊,没有漂亮的界面只有控制台的简单输... 查看详情

我的opengl学习进阶之旅学习opengles3.0的实战awsomedemo(上)

...了一个Demo工程,记录学习。三篇完整版链接:【我的OpenGL学习进阶之旅】学习OpenGLES3.0的实战AwsomeDemo(上)【我的OpenGL学习进阶之旅】学习OpenGLES3.0的实战AwsomeDemo(中)【我的OpenGL学习进 查看详情

我的一个react路由嵌套(多级路由),路由传参之旅(代码片段)

...深入学习路由的嵌套以及传参,这是工作中主要用要的。我的react已经配置了redux(见我的redux之旅),所以这是在引入的插件里做的演示。从App组件跳转到NewRoute组件(需要简单的路由跳转,点击自己预习) (1)新建一个demo:... 查看详情

我的一个react路由嵌套(多级路由),路由传参之旅(代码片段)

...深入学习路由的嵌套以及传参,这是工作中主要用要的。我的react已经配置了redux(见我的redux之旅),所以这是在引入的插件里做的演示。从App组件跳转到NewRoute组件(需要简单的路由跳转,点击自己预习) (1)新建一个demo:... 查看详情

2022年终总结,我的10年android之旅

本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索郭霖即可关注,每个工作日都有文章更新。不可思议,这已经是我第10个年头的年终总结了。但准确来说,我的Android之旅应该不止10年。2010... 查看详情

2022年终总结,我的10年android之旅

本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索郭霖即可关注,每个工作日都有文章更新。不可思议,这已经是我第10个年头的年终总结了。但准确来说,我的Android之旅应该不止10年。2010... 查看详情

我的opengl学习进阶之旅基本状态管理(代码片段)

在博客【我的OpenGL学习进阶之旅】OpenGLES3.0实现了具有可编程着色功能的图形管线中我们介绍了OpenGLES3.0中管线的各个阶段。每个管线阶段都有一个可以启用或者禁用的状态,每个上下文维护相应的状态值。状态的例子有混合... 查看详情

骑士之旅(回溯)

...述】:我正在尝试用8*8棋盘解决骑士的巡回赛问题。但是我的回溯是无限循环的。我的逻辑函数如下:-N是8。booleanalgo(intx,inty,intno_of_moves,intsol[][])if(no_of_moves==N*N)returntrue;intnextx;intnexty;for(i 查看详情

“我的linux内核之旅”

学生时代的吴峰光就被同学戏称为“老神仙”,两耳不闻窗外事,一心只搞Linux。吴峰光的Linux内核之路,是怎样的呢?一起来看 Linux内核贡献者吴峰光的“程序人生”:《新程序员001-004》全面上市,对话... 查看详情

我的angularjs源码学习之旅3——脏检测与数据双向绑定

前言   为了后面描述方便,我们将保存模块的对象modules叫做模块缓存。我们跟踪的例子如下<divng-app="myApp"ng-controller=‘myCtrl‘><inputtype="text"ng-model=‘name‘/><spanstyle=‘width:100px;height:20px;margin-left:300px;‘> 查看详情

韶华(同颓废之旅)

2020.1.11????我的博客竟然更新诈尸了!!我竟然返回竞赛室了,难啊,太难了!!之前两周,我因(looknovel),导致两周(FJ)还有万字检讨,难啊...????我发现,有时候人生就是那么的不尽人意,自从我罚站之后,╮(╯▽╰)╭,我的感触极为深刻,毕竟万... 查看详情

我的k8s架构搭建之旅

一、总体框架图:Master组件:nkube-apiserverKubernetesAPI,集群的统一入口,各组件协调者,以HTTPAPI提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给Etcd存储。nkube-controller-manager处理集群中常规后台任... 查看详情

我的渲染技术进阶之旅什么是aabb?(代码片段)

...其他的包围体一、为什么要学习AABB?在上一篇博客:【我的渲染技术进阶之旅】如何编译Filament的windows版本程序?中,我们查看了Fi 查看详情

我的渲染技术进阶之旅什么是aabb?(代码片段)

...其他的包围体一、为什么要学习AABB?在上一篇博客:【我的渲染技术进阶之旅】如何编译Filament的windows版本程序?中,我们查看了Fi 查看详情