美文网首页
毕业3年间,我是怎么完善自己的单体服务器架构的?

毕业3年间,我是怎么完善自己的单体服务器架构的?

作者: 茶艺瑶 | 来源:发表于2019-10-31 10:27 被阅读0次

    如果你不想看看看自己要如何进步不妨先看看这篇工作经验告诉你程序员工资瓶颈,和突破瓶颈的建议。

    毕业到现在,算了算也快3年了。我也不知道怎么突然,就玩了这么多技术,本来是.net的却成为了一枚PHP全栈工程师,虽然也不算深入,可是一般的软件开发,还是可以应付的。有些时候对广州那边的面试或者深圳的面试,我会比较抗拒笔试,因为我就没有看过他们所说的术语,我一直都是直接去GitHub直接review,并参考,不懂就谷歌。

    至于我是怎么开始走上架构搭建这条路,要从毕业开始。

    毕业的时候,由于信心和经历都不全面,去了一家广告公司,面向猪八戒接单,也就是外包公司,进去呆了两个月。感觉这不是我想要的发展方向,然后就不告而别了,因为年轻不懂事。然后去了一家卖茶叶的公司,他一开始把分享吹上天,然后去“微三云”企业参观,买了一套源码。然后教我维护,我一个刚毕业出来的人,业务都不懂怎么处理,你叫我维护一个上市公司的源码?,你这是逗我,然后一个月后我感觉不适应,我离职。然后去了一家还是没有任何人开发人员,想出来做金融行业的传统行业,这里就比较有趣了,我大学学到的东西,可以自己任由发挥,可是传统企业都有一个毛病,急于求成,两个月过去,它们发现没有任何收益,就解散了。

    然后接下来是我人生的转折点,这也是我遇到我职业生涯的导师,前后两个人,一个是我的上司,一个是我的经理。再遇到经理之前,和上司在另一家企业工作,然后公司搬到一个很大型的卖场,在那个卖场里面公司可以说是唯一一家科技公司,那时候那个卖场经理就来参观了。后面认识之后我们才知道,经理他以前是百度出身的。后面老板和技术总监闹矛盾,还打起了公司。然后就没然后了,所在的企业再次面临解散,然后我和上司就投靠了我们经理,想跟他做一番“大事业”。就这样,我们三个人就组建了一个团队了。

    因为上司年纪也上去了,又有家庭,所以很多时候,我要承担更多的事,前端是我,php,服务器搭建都是我,哈哈哈。那时候的业务和敏感业务处理,上司是不会给我处理的,所以php也就crud 这样一个水平,上司在技术选行这个工作是交给我处理的,所以你们说的所有框架我都玩过,无论angular.js , angluar , React , Vue , Omi ,ThinkPHP , Laravel , Yii2 , Mysql, Node.js, Egg.js,
    Express.js .... 等等等,这可以说是初级架构师要做的事情吧。最后根据团队情况,我选择了Laravel + (Vue Or React)作为自己技术栈,后端还是中规中举的Layui,不用问我为什么,有什么是一个Jquery做不了?如果有那就两个!因为后端可是什么前端框架都不会,可他们肯定会jQuery。

    可以浏览一下我的简书,你会发现,我2017年一年下来,写得最多的博客是服务器搭建。是的我一年就开始搭建服务器架构了。还有就是搭建了一个gogs

    先来一张完整的


    image.png

    也就能运行php环境这个阶段,同时开始通过经理给的需求,进行需求分析和于上司经行业务梳理,然后制度方案,一开始的架构很简单,也加我们说的 dump ,连redis缓存机制都没有,缓存用的是本地文件机制来处理。
    第一版的时候:服务器环境是这样的


    image.png

    全部的代码都在一台主机上运行。因为当时业务并不算大。我并没有选择国内所说的centos做服务器系统,而是选择了ubuntu来做,因为ubuntu的软件库的支持,我距地是外来云计算会有很大的作用。

    后面我们需要用到缓存机制,那么我们的环境架构也需要更新支持,在windows上会出现各种奇葩的问题,比如php扩展的安装就是windows的头疼问题,现在的windows10已经有解决方案,可是当时的我们没有这种条件,php的图片处理需要扩展,什么都需要。那时候我开始提出使用虚拟机作为我们的开发环境,使用的vm虚拟机,利用的是vm虚拟共享文件机制,加上hosts的映射到虚拟机中。这样处理后,我们企业的php环境保证一至。

    这时候的开发环境就变成了


    image.png

    随着自己对linux的熟悉,和环境搭建的逐渐深入。16年可以说是vue爆发的一年,我在14年就已经接触vue这个框架,可是当时的人向往的是angluar.js,我知道国人的尿性,vue迟早是一个趋势,16年vue爆发,生态完善,同时小程序的出现,了解了一下,发现小程序有点像vue,后面也有类vue框架的出现,那是我意识到前后分离的重要性。这个时候才算真正入门架构搭建。

    image.png

    这时候的属于中规中矩的一种软件开发中的处理手段,到了后面,mysql的数据库需要做读写分离,一般的人是怎么处理呢?还就真的是处理配置读写分离,在程序上做一些判断!!!就是写的时候catenation读数据库,catenation写数据库,这样做也不是不行,只是后面的时候,你的系统解藕会非常痛苦,可能你有时候都忘了那个地方写个catenation别名。我选择的是使用中间件链接池来管理我的数据库读写分离。

    这个时候我已经开始认识Swoole了,我无意间在开源中国发现SMProxy这个基于Swoole的数据库链接池。所以后面也就开始出现以下情况。

    image.png

    随着后面的访问量上来之后,mysql读的速度跟不上了,因为用的是laravel,laravel运行速度你们都懂,我就不多说了,那时候知道laravel+swoole可以提高性能,可是每次都要去服务器重启服务,而且那时候的swoole还停留在1.9的版本,估计坑也不少,所以为了保守,就在mysql和api层都做了负载均衡。
    你就看到了如下情况。

    image.png

    为什么需要用到 keepalived 去监听写入的mysql? 如果mysql写入挂了,keepalived一旦检查到,会把某台读mysql换左写入数据库。保证你的系统还可以继续进行。

    到了这里,就算你的电脑是16G运行这么台虚拟机后难免也会有点卡的啦,虽然以前有用过docker,可是那时候对linux并不熟悉,搭建环境的时候,会遇到各种问题,Dockerfile 写都写不出来,直到今年19年4月,我开始意识到我需要docker了,而19年的docker已经很完善了,docker-compose的出现,可以让你模拟的环境一键部署。我一开始去github 找了好几个docker-compose版本的来看看,并吸收他们的精华,并现在自己的docker-composer 项目环境部署。

    ui层一直是我来维护的,我选择的是React做为我的技术栈,不为别的,就因为他支持Ts,写代码跟舒服,而且有antd这个叼东西支持。可是我们的ui层分为 小程序 / express.js (PC端渲染层 SEO)/ 手机端 React 。小程序 和 React 还好说,是静态资源,express 就有点麻烦了,需要重启服务,所以这个时候就需要pm2的接入。同时Swoole的完善进入Swoole4。

    由于swoole 的高性能,所以之前的负载均衡就可以剩下来了。

    image.png

    随着ui层 和 swoole 每次迭代更新代码,都需要做一个繁琐的操作,打包编译。
    所以这个时候就有了jenkins这个角色。

    jenkins简单点就是自动化部署工具,现在有了docker 安装简单的要死。。

    image.png

    到了这里,几乎一般软件开发都可以应付。当然这里这是环境搭建而已,还有一些业务梳理架构没有详细说明,如果你能搭建到以上服务器环境的话,那么你的项目就不可能,只停留在写代码这么简单了,因为现在是数据驱动行业的年代,我们需要对用户行为进行分析!!!

    往往我们市场说得最多得就是 pv uv,如果是你,你会怎么处理?

    如果没有接触过nignx 日志的码农一般都会给出两个方案:
    第一,使用站长工具
    第二,利用 ajax + 建立数据库模型。然后使用程序+mysql做统计分析。

    第二种是,属于高级版本,往往需要用到Redis + 定时任务来写入数据库,如果不是这样,你的写入数据库不做集群?等着呵呵吧。

    如果接触过nginx日志的同学来说,php面对这一个海量数据的时候,很多PHP 或者 Node 的开发人员第一时间都会蒙蔽,是的如果你听到海量数据,你第一反应的就是hadopp,这个时候我们需要跳出自己生活许久的圈子(PHP + Node),为什么要选择Hadoop而不是采用第二种方式呢?因为Hadoop提供了很多面对海量数据的算法,还有之前写爬虫的时候利用的是python,python+Hadoop 数据分析,你还用愁你分析不出东西吗?

    所以又得到以下日志架构

    image.png

    等等一些nginx的用户行为。

    有了以上的日志分析,我们会发现有时候会有同行或者某些人,是恶意扫描我们的服务器,我这个时候就应该需要Api网关了。

    我选择的是kong,其实你用nginx也可以,不过嘛,你也懂php / node 出生的,哪里懂那些底层的东西...,除非你会golang。

    Kong 是通过 Admin API 管理,不像Nginx那样在配置中完成。有管理工具你不用你傻呀?而且 Kong支持 Lua 插件机制 、支持OAuth2.0、黑白名单、ACL、JWT、SSL 等 、限量的Rate Limiting 还有 可管理性Rest API 交互 性能也比较高。

    所以又改了一下

    image.png

    到了后面你的数据量也会越来越大,这个时候你还在用mysql的全文搜索索引,是很不现实的一建事情。

    这个时候你不得不考虑使用 搜索引擎。外国人用的比较多的是Elastic Search当然laravel也对Elastic Search的支持。可惜嘛这个东西消耗的资源太大了。我们最后还是使用了xunsearch,虽然这个东西有时候搜索的东西不准,但是至少能用....,就是配置起来嘛没有Elastic Search方便。

    这里搜索引擎用在搜索产品上,你需要用 队列 或者 定时任务 来同步 xunsearch 和 mysql 之间的关系。

    2019 9 月,这是一个尴尬的时候,由于实体经济的下滑,系统也过于稳定。大老板不想在开发系统了。技术部面临解散,我和上司,经理告白之后。重新踏上招工作的路程。

    我并不知道自己能不能胜任架构师这个岗位,因为看了看描述,几乎都在本科学历。我想想我可以做前端/php/全栈这个些岗位。

    也开始投,可是嘛,怎么说呢。带人我也带过,虽然说技术不是很精,可是业务处理能力我也是有的,你也不能因为我学历还有年轻压我工资嘛。

    9月底,决定跳出中山这个环境。去了广州二家企业面试,感觉做不会以前的事了,要当回码农,可玩的事情就变得越来越少了。

    最后不知道什么原因,我遇到一家创业公司的邀约。
    就这样我又回到以前的工作内容

    需求分析 业务梳理 架构搭建,现在老板算是比较成功的啦,可以把平台做到300wpv的巅峰时期。

    我看来看现在的pv还是可以的 每天也有10v ,不过之前的那个系统bug较多,系统也没有利用设计模式开发,全是堆代码,技术总监的离职,我感觉这个坑我是接不了。

    申请重构代码,并把一些不合理的业务重新梳理一遍
    然后架构也变为一下状态

    image.png

    又从零开始了,来着可怜的程序员傻梦傻,现在面临的问题是 docker 在不同机子部署的时候,都要麻烦的去 开启端口映射, 所以未来需要做得是 学习k8s ,还有mysql 以前用的是 orm较多, 可是现在为了提高这方便的知识,偶尔会写sql api层减少 查询次数。

    SQL 我现在用的是基于小米的soar-web。

    相关文章

      网友评论

          本文标题:毕业3年间,我是怎么完善自己的单体服务器架构的?

          本文链接:https://www.haomeiwen.com/subject/hsonvctx.html