工作中的“厨师”,生活上的诗人,其实也是架构师
Posted Alibaba F2E
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了工作中的“厨师”,生活上的诗人,其实也是架构师相关的知识,希望对你有一定的参考价值。
“解决历史问题最大的困难就是找不到人,我们看到的可能只有一个页面,但是这个页面是谁开发的并不清楚,然后也不知道这块业务归谁管理,这样就会导致我们决策不了能不能下线。特别是产品经理更换以后,新来的产品经理也不熟悉这块业务,更不敢轻易下线。这里面不只是技术问题,每个领域都有涉及到,所以我做这个事情是希望可以反向推动产品、对应的业务或者是对应的技术团队,去下线这些无用的内容或者是去做一些革新。”
在这个系统中有很多站点,对应很多域名,每一个域名下面有很多页面,贯高这边按域名从流量小到流量大逐步去下线,目前整体已经还掉了差不多50%的债务。但我们的架构及一些能力仍持续在演进,同时也会带来一些新的“债务”,需要我们各业务团队一起不断去排查并及时的进行下线,避免造成其他影响。
《为什么会主动解决历史债问题》
“我不希望自己在聚光灯下,如果自己做的一些事能够让身边的人感到快乐,就心满意足了。当厨师不做将军,我自认为不是那种可以带领三军冲锋陷阵的人,也无法更好的激励团队前行,但我觉得自己更适合做一个服务角色,让士兵不会饿着肚子作战。厨师在厨房做了很多准备,目的就是为了把菜做出来,这样别人就可以享用。如果你做的味道还比较好,大家也很喜欢你做的菜,那么自己也会感受到这个过程中的乐趣。”
“所以,我想做的就是通过一些核心的底层能力,让大家能减少日常遇到的调试复杂的问题,对 Develop 来说体验能够得到一些改善。虽然这个愿景比较美好,通过一个人的力量还是比较困难的,但我愿意去尝试,也希望能做好这个服务的角色,给予大家更好的支撑。”
《作为架构师,最大的成就感是什么》
“在对调酒感兴趣之前,我很少去酒吧,也对酒吧有着一些偏见。但在一次机缘巧合下,在B站看了卡司(某酒区up主)的视频,觉得调酒这件事情很有意思,自己也慢慢接触各种酒的类型,学习鸡尾酒的做法。B站酒区里面,也有越来越多的年轻人喜欢在家调酒。其实,调酒并不是为了喝醉,酒也是一种美食,通过嗅觉、味觉、触感,我们可以感受到每一款酒的特色以及他背后的故事。”
对于饮品来说,每一种味道的背后都比较复杂,只有懂得人可以尝出每种味道的不同。经典鸡尾酒,都是基酒加上水果,或加上气泡水,或加上利可酒调制而成的。这里面比较有意思的是,你通过不同的调制方式,一个是量、一个是冰的融水度,还有一个是酸甜的比例,通过这些就能调出你喜欢的口味。
每一点微小的变化,都能带来味道上很大的改变,调酒如是,工作上亦是如此。
《如何平衡全局与细节之间的关系》
在很多时候,我们需要和自己和解,去承认自己的短板,让长板可以跑的更快。纠结只会让自己患得患失,失去了向上的机会,换一条路也许会更难走。人生的终极追求可能是每个人需要考虑的问题,而且答案也必定不同。
我们经常容易被眼前的一些琐事遮住看向远方的双眼,忽略了那些需要我们长期投入有更大意义的事情。我们可以去发现一件值得自己全心投入去做的事情,然后结合自己未来的愿景,躬身入局,把自己融入,长期 AII-in,让自己成为解决问题的变量,不断让自己的肉体去靠近内心想要的那个样子。
关注「Alibaba F2E」微信公众号把握阿里巴巴前端新动向
初识分布式架构
经典架构技术文章第一时间送达!
分布式架构的常见概念
集群
小饭店原来只有一个厨师,切菜洗菜备料炒菜全干。后来客人多了,厨房一个厨师忙不过来,又请了个厨师,两个厨师都能炒一样的菜,这两个厨师的关系是集群。
分布式
为了让厨师专心炒菜,把菜做到极致,又请了个配菜师负责切菜,备菜,备料,厨师和配菜师的关系是分布式,一个配菜师也忙不过来了,又请了个配菜师,两个配菜师关系是集群。
节点
节点是指一个可以独立按照分布式协议完成一组逻辑的程序个体。在具体的项目中,一个节点表示的是一个操作系统上的进程。
副本机制
副本(replica/copy)指在分布式系统中为数据或服务提供的冗余。
数据副本指在不同的节点上持久化同一份数据,当出现某一个节点的数据丢失时,可以从副本上读取到数据。(张三请假了,李四负责顶替张三的工作)数据副本是分布式系统中解决数据丢失问题的唯一手段。
服务副本表示多个节点提供相同的服务,通过主从关系来实现服务的高可用方案。
中间件
中间件位于操作系统提供的服务之外,又不属于应用,他是位于应用和系统层之间为开发者方便的处理通信、输入输出的一类软件,能够让用户关心自己应用的部分。
架构的发展过程
一个成熟的大型网站系统架构并不是一开始就设计的非常完美,也不是一开始就具备高性能、高可用、安全性等特性,而是随着用户量的增加、业务功能的扩展逐步完善演变过来的。在这个过程中,开发模式、技术架构等都会发生非常大的变化。
阶段一,单应用架构
网站的初期也可以认为是互联网发展的早起,我们经常会在单机上跑我们所有的程序和软件。把所有软件和应用都部署在一台机器上,这样就完成一个简单系统的搭建,这个时候讲究的是效率。
阶段二,应用服务器和数据库服务器分离
随着网站的上线,访问量逐步上升,服务器的负载慢慢提高,在服务器还没有超载的时候,我们应该做好规划,提升网站的负载能力。假如代码层面的优化已经没办法继续提高,在不提高单台机器的性能,增加机器是一个比较好的方式,投入产出比非常高。这个阶段增加机器的主要目的是将web服务器和数据库服务器拆分,这样不仅提高了单机的负载能力,也提高了容灾能力。
阶段三,应用服务器集群
随着访问量的继续增加,单台应用服务器已经无法满足需求。在假设数据库服务器还没有遇到性能问题的时候,我们可以增加应用服务器,通过应用服务器集群将用户请求分流到各个服务器中,从而继续提升负载能力。此时多台应用服务器之间没
有直接的交互,他们都是依赖数据库各自对外提供服务。
架构发展到这个阶段,各种问题也会慢慢呈现:
1. 用户请求由谁来转发到具体的应用服务器。
2. 用户如果每次访问到的服务器不一样,那么如何维护session。
阶段四,数据库压力变大,数据库读写分离
架构演变到这里,并不是终点。上面我们把应用层的性能提上来了,但是数据库的负载也在慢慢增大,那么怎么去提高数据库层面的负载呢?有了前面的思路以后,自然会想到增加服务器。但是假如我们单纯的把数据库一分为二,然后对于后续数据库的请求,分别负载到两台数据库服务器上,那么一定会造成数据库不统一的问题。所以我们一般先考虑读写分离的方式。
这个架构的变化会带来几个问题:
1. 主从数据库之间的数据同步,可以使用 mysql 自带的master-slave方式实现主从复制。
2. 对应数据源的选择,采用第三方数据库中间件,例如 mycat。
阶段五,使用搜索引擎缓解读库的压力
数据库做读库的话,常常对模糊查找效率不是特别好,像电商类的网站,搜索是非常核心的功能,即便是做了读写分离,这个问题也不能有效解决。那么这个时候就需要引入搜索引擎了,使用搜索引擎能够大大提高我们的查询速度,但是同时也会带来一些附加的问题,比如维护索引的构建。
阶段六,引入缓存机制缓解数据库的压力
随着访问量的持续增加,逐渐出现许多用户访问同一部分内容的情况,对于这些热点数据,没必要每次都从数据库去读取,我们可以使用缓存技术,比如 memcache、redis 来作为我们应用层的缓存。另外在某些场景下,比如我们对用户的某些IP的访问频率做限制,那这个放内存中又不合适,放数据库又太麻烦,这个时候可以使用Nosql的方式,比如mongDB来代替传统的关系型数据库。
阶段七,数据库的水平/垂直拆分
我们网站演进的变化过程,交易、商品、用户的数据都还在同一个数据库中,尽管采取了增加缓存,读写分离的方式,但是随着数据库的压力持续增加,数据库的瓶颈仍然是个最大的问题,因此我们可以考虑对数据进行垂直拆分和水平拆分。
垂直拆分:把数据库中不同业务数据拆分到不同的数据库。
水平拆分:把同一个表中的数据拆分到两个甚至更多的数据库中,水平拆分的原因是某些业务数据量已经达到了单个数据库的瓶颈,这时可以采取将表拆分到多个数据库中。
阶段八,应用的拆分
随着业务的发展,业务越来越多,应用的压力越来越大,工程规模也越来越庞大。这个时候就可以考虑将应用拆分,按照领域模型将我们的用户、商品、交易拆分成多个子系统。
这样拆分以后,可能会有一些相同的代码,比如用户操作,在商品和交易都需要查询,所以会导致每个系统都会有用户查询访问相关操作。这些相同的操作一定是要抽象出来,否则就会是一个坑。所以通过走服务化路线的方式来解决。
那么服务拆分以后,各个服务之间如何进行远程通信呢?
通过 RPC技术,比较典型的有:webservice、hessian、http、RMI等等。前期通过这些技术能够很好的解决各个服务之间通信问题,但是互联网的发展是持续的,所以架构的演变和优化还在持续。
架构全局图
如需查看更多技术架构文章,长按下面二维码关注,获取大量经典架构技术,让我们一起学习架构技术支持,成长为架构师。
经典技术架构
ID:tuhao_programer
互联网 | 海量高可用 | 应用技术架构丨大数据丨机器学习 | 云计算
以上是关于工作中的“厨师”,生活上的诗人,其实也是架构师的主要内容,如果未能解决你的问题,请参考以下文章