写这篇文章为了更清楚自己技术能力,同时分享给大伙,看看自己技术水平位于哪里。
个人能力有限,基于我所理解的知识来讲解一下:从程序员到大型分布式架构师,我们自己到底位于哪里。
描述不当之处还请各路大佬点明,老弟也好更上一层楼!!!
本人就以之前画的微服务系统架构图来逐一讲解。
原图地址:微服务系统架构图 | ProcessOn免费在线作图,在线流程图,在线思维导图 |
从程序员的视角到大型分布式架构师的视角来看……
1.懵懵懂懂的我
我刚开始学习Java编程时,只知道写下简单的格式化输出语句,在开发工具打印出来;简单读写文件数据;后来开始接触数据库,学习JDBC,学会了简单的增删改查;接着学前端三剑客,学习jsp,学会了写个简单的页面。到这里就经历了,普通jar应用到web应用。但当时的我一脸懵逼,根本不知道自己能干什么,甚至连开发web应用是用HTML+ajax开发还是用jsp+ajax来开发,因为我当初不知道动态页面和静态页面的区别。
因为蒙圈,所以学习。为了更好更快的开发,我开始接触框架、接触MVC三层架构、接触JQuery。应用和数据库交互不用自己封装JDBC了、有了规范写起来不乱套了、不在需要写原生js那么枯燥了。当时也是懵懵懂懂,知道怎么用,不知道自己技术位于哪里,也不知道该如何成长。
后来接触Spring,当时SpringBoot还不流行,但用着非常流行的一套框架SSM(Spring,SpringMVC,MyBatis)整个项目都简单起来开发也迅速,copy配置文件配置下就可以用起来。但当时前端还是用着jsp,el表达式,ajax。此时的系统还是个普通的JavaWeb项目。当初做个管理系统还是可以用的,哈哈哈。后面学习了tomcat、linux、前端框架bootstrap、easyUI、maven,接触了前后端分离。
SpringBoot 2.0发布后,才开始使用SpringBoot开发。前端框架vue 逐渐流行起来,也开始学习vue,学习前端新的ui框架如:elementui。学习前后端分离部署,前端编译打包部署于nginx,后端编译打包内置tomcat部署。
总结
技术学到这里,掌握了jar应用、一体化web和前后端分离web的开发,但依旧是个单机项目,整体来说就前端、后端和数据库,位于微服务系统中“红色框”。
虽是沧海一粟,却是根牢蒂固。这只是基础的业务代码,也是很多程序员所做的工作。
在此需要领悟一点:在大型分布式架构平台下,程序员使用平台中不同的技术开发出解决不断增长业务的应用。
2.刻苦修炼成为强者
为了应对各种复杂的业务,需要不断学习各种新技术。接下来将逐一简述常用技术。
2.1.任务调度技术
也称为定时任务,定时的执行一些程序来完成业务所需功能。如:定时日终对账。
常用任务调度技术
2.2.缓存技术
缓存说白了就是面向内存操作数据,读写速度很快,也支持缓存数据持久化的文件中。在此重点讲解技术的使用场景,以代表性的缓存技术Redis为例,常用场景有:热点数据缓存,数据共享,分布式锁,全局ID,购物车等等。
2.3.消息队列技术
常用消息队列RabbitMQ、RocketMQ、Kafka。如:对日志收集和数据收集场景则使用Kafka。常见应用场景如图
2.4.文件存储技术
主要用于保存业务数据文件和文件传输,可以在存储上做修改操作,文件存储的树状结构及路径访问方式虽然方便用户理解、记忆和访问。如:某些业务交互需要通过ftp文件传输来完成。
2.5.对象存储技术
主要用于保存不在存储上做修改的数据。方便计算机软件访问文件存储系统。如:图片,视频等。
关于怎么选择文件存储还是对象存储,主要看是否需要支持在存储设备上修改数据,像图片这种数据就不需要在存储设备上直接修改数据。非常重要的一点:对象存储的数据都是整个数据取出来,修改,再放回去的模式,不支持直接在存储上修改。
技术方案:MinIO
Minio 是个基于 Golang 编写的开源对象存储套件,基于Apache License v2.0开源协议,拥有着高性能、可扩展、支持云原生、兼容亚马逊S3云存储服务接口等优点。
2.6.搜索引擎技术
主要用于数据快速检索。
技术方案:Elasticsearch、Solr
常用使用场景:
2.7.数据库分库分表技术
如果还是使用以往方式,则查询一个表数据需要多次访问不同的库来实现数据的查询。数据库分库分表后需要引入新的技术来方便数据的操作。有两种方案:客户端方案和中间件(中间层)方案
Sharding-JDBC客户端方案就是引入新的jar,通过客户端来访问数据库,无代理层,无需更改部署架构;
MyCat 中间件方案就是新增一层代理,通过代理来访问数据库,后端无代码入侵,直接访问代理层。
2.8.集群技术
有的中间件天然支持集群,而有的则需要自己搭建集群部署环境。
常用的软件负载均衡技术组合:
三者都是采用反向代理来实现负载均衡。
nginx 使用更加广泛,不仅可以用于搭建负载均衡,还可以用于部署前端系统,nginx支持更高的并发、对传输文件进行压缩传输等功能。
2.9.内网私库
有的公司只能使用内网开发或自研了框架技术,这时使用外网的库(maven库、Gradle库或npm库)都是无法解决该问题的,此时必须公司搭建私库统一提供服务,自研框架上传到私库或内网服务构建环境走内网私库。
使用Nexus 技术来搭建私库,支持Maven仓库、Gradle仓库和npm仓库。
总结
第2大点主要讲了常用中间件技术。到此为止常用开发技术基本都有接触到了(框起来的红色部分)。学习到这个水平也已经非常不错了,不要整天一上来就学习什么电商系统、搞一整套微服务架构这些东西,把这些技术学扎实才是王道。
在这里多唠叨几句,微服务治理架构的搭建并不会提高你的编程能力,能接触到生产环境微服务架构搭建落地的又有多少呢?说白了搭建这些的意义是什么呢?最终不都是服务于业务吗?业务的不断增长,系统不断的越来越繁杂,开发和维护都变得越来越复杂,才需要搭建治理环境来更好的开发部署,监控运维。宗旨,要在基础打牢后再学习服务治理相关技术。
在第二篇继续解说:分布式服务治理方案、DevOps(开发运维一体化)、大数据接入、内网DNS等等。
第二篇:从程序员到大型分布式架构师,自己到底位于哪里(二)
转载请指名出处!!