架构师的初级技能,选组件!(2020更新版)

2020-09-16  本文已影响0人  PHP9年架构师

本篇内容涵盖14个方面,涉及上百个框架和工具。会有你喜欢的,大概也会有你所讨厌的家伙。这是我平常工作中打交道最多的工具,大小公司都适用。如果你有更好的,欢迎留言补充。

一、消息队列二、缓存三、分库分表四、数据同步五、通讯六、微服务七、分布式工具八、监控系统九、调度十、入口工具十一、OLT(A)P十二、CI/CD十三、问题排查十四、本地工具

10年架构师领你架构-成长之路-(附面试题(含答案))

(腾讯T3-T4)打造互联网PHP架构师教程目录大全,只要你看完,薪资立马提升2倍(持续更新)

原文链接:juejin.im

点击与我交流企鹅群

一、消息队列

[图片上传失败...(image-8a8c88-1600265599787)]

一个大型的分布式系统,通常都会异步化,走消息总线。 消息队列作为最主要的基础组件,在整个体系架构中,有着及其重要的作用。异步通常意味着编程模型的改变,时效性会降低。

二、缓存

[图片上传失败...(image-fe54d-1600265599787)]

数据缓存是减少数据库压力的有效途径,有单机java内缓存,和分布式缓存之分。

三、分库分表

[图片上传失败...(image-b1f2b6-1600265599787)]

如果只需要读写分离 ,那么mysql官方驱动里的replication协议,是更加轻量级的选择。 上面的分库分表组件,都是大浪淘沙,最终的优胜品。这些组件不同于其他组件选型,方案一旦确定,几乎无法回退,所以要慎之又慎。 分库分表是小case,准备分库分表的阶段,才是重点:也就是数据同步。

四、数据同步

[图片上传失败...(image-34e2e-1600265599787)]

国内使用mysql的公司居多,但postgresql凭借其优异的性能,使用率逐渐攀升。 不管什么数据库,实时数据同步工具,都是把自己模拟成一个从库,进行数据拉取和解析。 具体来说,mysql是通过binlog进行同步;postgresql使用wal日志进行同步。

五、通讯

[图片上传失败...(image-cf0715-1600265599786)]

Java 中,netty已经成为当之无愧的网络开发框架,包括其上的socketio(不要再和我提mina了)。对于http协议,有common-httpclient,以及更加轻量级的工具okhttp来支持。

通常,服务的响应时间主要耗费在业务逻辑以及数据库上,通讯层耗时在其中的占比很小。可以根据自己公司的研发水平和业务规模来选择。

感谢大家一直来支持,这是我准备的1000粉丝福利

【1000粉丝福利】10年架构师分享PHP进阶架构资料,助力大家都能30K

六、微服务

[图片上传失败...(image-b88829-1600265599786)]

我们不止一次说到微服务,这一次我们从围绕它的一堆支持框架,来窥探一下这个体系。是的,这里依然是在说spring cloud。


网关方面,使用最多的就是nginx,在nginx之上,有基于lua脚本的openrestry。由于openresty的使用非常繁杂,所以有了kong这种封装级别更高的网关。 对于spring cloud来说,zuul系列推荐使用zuul2,zuul1是多线程阻塞的,有硬伤。spring-cloud-gateway是spring cloud亲生的,Spring Cloud 大力支持,基于 Spring5.0 的新特性 WebFlux 进行开发。底层网络通信框架采用的是 Netty,吞吐量高。

七、分布式工具

[图片上传失败...(image-fbdaef-1600265599786)]

大家都知道分布式系统zookeeper能用在很多场景,与其类似的还有基于raft协议的etcd和consul。

八、监控系统

[图片上传失败...(image-a95f98-1600265599786)]

监控系统组件种类繁多,目前,最流行的大概就是上面四类。 zabbix在主机数量不多的情况下,是非常好的选择。 prometheus来势凶猛,大有一统天下的架势。它也可以使用更加漂亮的grafana进行前端展示。 influxdata的influxdb和telegraf组件,都比较好用,主要是功能很全。 使用es存储的elkb工具链,也是一个较好的选择。我所知道的很多公司,都在用。

九、调度

[图片上传失败...(image-ccdede-1600265599786)]

大家可能都用过cron表达式。这个表达式,最初就是来自linux的crontab工具。 quartz是java中比较古老的调度方案,分布式调度采用数据库锁的方式,管理界面需要自行开发。 elastic-job-cloud应用比较广泛,但系统运维复杂,学习成本较高。相对来说,xxl-job就更加轻量级一些。中国人开发的系统,后台都比较漂亮。

十、入口工具

[图片上传失败...(image-3308b3-1600265599786)]

为了统一用户的访问路口,一般会使用一些入口工具进行支持。

其中,haproxy、lvs、keepalived等,使用非常广泛。

服务器一般采用稳定性较好的centos,并配备ansible工具进行支持,那叫一个爽。

十一、OLT(A)P

[图片上传失败...(image-87e7b8-1600265599786)]

搜索方面,solr和elasticsearch比较流行,它们都是基于lucene的。solr比较成熟,稳定性更好一些,但实时搜索方面不如es。 列式存储方面,基于Hadoop 的hbase,使用最是广泛;基于LSM的leveldb写入性能优越,但目前主要是作为嵌入式引擎使用多一些。 tidb是国产新贵,兼容mysql协议,公司通过培训向外输出dba,未来可期。 时序数据库方面,opentsdb用在超大型监控系统多一些。druid和kudu,在处理多维度数据实时聚合方面,更胜一筹。 cassandra在刚出现时火了一段时间,虽然有facebook弃用的新闻,但生态已经形成,常年霸占数据库引擎前15名。

十二、CI/CD

[图片上传失败...(image-635846-1600265599786)]

为了支持持续集成和虚拟化,除了耳熟能详的docker,我们还有其他工具。

十三、问题排查

[图片上传失败...(image-df6eae-1600265599786)]

java经常发生内存溢出问题。使用jmap导出堆栈后,我一般使用mat进行深入分析。

如果在线上实时分析,有arthas和perf两款工具。

当然,有大批量的linux工具进行支持。

十四、本地工具

[图片上传失败...(image-dac91d-1600265599786)]

本地使用的jar包和工具,那就多了去了。下面仅仅提一下最最常用的几个。 数据库连接池方面,国内使用druid最多。目前,有号称速度最快的hikari数据库连接池,以及老掉牙的dbcp和c3p0。 json方面,国内使用fastjson最多,三天两头冒出个漏洞;国外则使用jackson多一些。它们的api都类似,jackson特性多一些,但fastjson更加容易使用。鉴于fastjson频繁出现安全问题,现在已经掀起了一股去fastjson的浪潮。 工具包方面,虽然有各种commons包,guava首选。 技术日新月异,新瓶装旧酒,名词一箩筐,程序员很辛苦。唯有那背后的基础原理,大道至简的思想,经久不衰。

喜欢我的文章就关注我吧,持续更新中.....

以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要的可以点击进入暗号:知乎

上一篇 下一篇

猜你喜欢

热点阅读