当前位置: 首页 > 后端技术 > PHP

毕业后的3年,我是如何改进我的单机架构的?

时间:2023-03-29 16:05:22 PHP

毕业快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+(VueOrReact)作为自己的技术栈,后端还是标准的Layui。不要问我为什么,Jquery有什么不能做的?如果有两个!因为后台不会什么前端框架,但是jQuery肯定会。大家可以浏览一下我的简书,你会发现我2017年写得最多的博客就是服务器搭建。是的,我在一年前开始构建服务器架构。还有搭建gogs运行php环境的阶段。同时我们开始分析经理给的需求,和老板梳理业务,然后系统方案。一开始结构很简单,我们还补充说dump连redis缓存机制都没有,缓存是通过本地文件机制来处理的。在第一个版本中:服务器环境是所有代码都在一台主机上运行。因为当时生意还没有那么大。我在国内没有选择centos作为服务器系统,而是选择了ubuntu来做。因为ubuntu的软件库的支持,让我远离远程云计算,会有很大的作用。后面我们需要用到缓存机制,所以我们的环境架构也需要更新和支持。在windows上会出现各种奇怪的问题,比如php扩展的安装,让windows很头疼。现在windows10有解决办法,但是当时我们没有这种条件。PHP的图像处理需要扩展,什么都需要。当时我就开始提议用虚拟机作为我们的开发环境。使用的vm虚拟机使用了vm虚拟共享文件机制,加上hosts到虚拟机的映射。经过这样的处理,保证了我们企业的php环境是完美的。这时候开发环境对linux越来越熟悉了,环境也逐渐搭好了。2016年可以说是vue大爆发的一年。2014年开始接触vue的框架,但那时候的人对angluar.js是向往的。我知道中国人的尿。迟早,vue是一种趋势,生态完善,同时小程序的出现,稍微了解后,发现小程序有点像Vue,后来也有类似Vue的框架出现,那时候我才意识到前后分离的重要性。这时候才算是真正的入门架构搭建。这时,它是软件开发中的一种标准处理方法。后来mysql数据库需要读写分离。普通人如何应对?真的是在处理configuration的读写分离,对程序做一些判断!!!即写的时候,catenation读数据库,catenation写数据库。这样做不是不可能,但是以后,解耦你的系统会很痛苦。也许你有时会忘记在那个地方写一个catenation别名。我选择的是使用中间件连接池来管理我的数据库读写分离。这个时候,我已经开始认识Swoole了。无意间在开源中国发现了SMProxy,一个基于Swoole的数据库连接池。所以后面开始出现下面的情况。随着后面的访问上来,mysql的读取速度跟不上了,因为用的是laravel,laravel的运行速度大家都知道,就不多说了。那时候知道laravel+swoole可以提升性能,但是每次每次都要去服务器重启服务,而且那时候的swoole还是1.9版本,估计有很多陷阱,所以为了保守起见,在mysql和api层都做了负载均衡。可以看到如下情况。为什么要用keepalived来监控写好的mysql?如果mysql写挂了,一旦keepalived查到,就会把某个读mysql切换到左边,写入数据库。确保您的系统可以继续工作。此时,即使你的电脑是16G运行这样的虚拟机,也难免有点卡顿。虽然之前用过docker,但是那时候对linux还不熟悉。在搭建环境的时候,会遇到各种各样的问题,我什至无法编写Dockerfile。直到2019年4月,我才意识到我需要docker,而2019年的docker非常完美。docker-compose的出现,让你一键部署模拟环境。我先去github找了几个docker-compose版本看一看,吸取了它们的精华,现在部署自己的docker-composer项目环境。ui层一直是我维护的。我选择React作为我的技术栈,不为别的,就是因为它支持Ts,写代码舒服,还有antd支持。但是我们的ui层分为applets/express.js(PC端渲染层SEO)/移动端React。好在小程序和React都是静态资源,但是express有点麻烦,需要重启服务,所以这时候需要pm2接入。同时,Swoole的完善进入了Swoole4。由于swoole的高性能,之前的负载均衡可以不用管了。由于ui层和swoole每次迭代都会更新代码,需要做一个繁琐的操作,打包编译。所以这时候就有了jenkins的作用。jenkins简单点就是一个自动化部署工具,现在用docker安装就是这么容易死。.在这一点上,几乎一般的软件开发都可以搞定。当然这里只是环境搭建,还有一些名片结构没有详细说明。如果你能搭建上面的服务器环境,那你的项目就没法做了。它就像编写代码一样简单,因为现在它是数据驱动的。工业时代,我们需要分析用户行为!!!往往我们市场上谈论最多的就是pvuv,如果是你,你会怎么处理?没有接触过nignx日志的coder一般会给出两种解决方案:一是使用站长工具,二是使用ajax+搭建数据库模型。然后用程序+mysql做统计分析。二是属于进阶版,经常需要使用Redis+定时任务写入数据库。如果不是这样,你写数据库不是集群?等等嘿嘿对于接触过nginx日志的同学来说,当PHP面对如此海量的数据时,很多PHP或者Node开发者会立马上当受骗。是的,如果你听到海量数据,你的第一反应就是hadopp。这个时候我们需要跳出我们生活的圈子(PHP+Node),为什么要选择Hadoop而不是第二种方式呢?因为Hadoop提供了很多处理海量数据的算法,而我写爬虫的时候用的是python,python+Hadoop数据分析,你还愁什么分析不出来吗?于是得到了如下的日志结构和一些nginx的用户行为。通过上面的日志分析,我们会发现有时候同行或者某些人恶意扫描我们的服务器,这时候我应该需要一个Api网关。我选择了。其实你也可以用nginx,不过你也要懂php/node。你怎么能理解那些底层的东西......除非你知道golang。Kong通过AdminAPI进行管理,而不是像Nginx那样进行配置。不需要管理工具你是不是傻了?而且Kong支持Lua插件机制,支持OAuth2.0、黑白名单、ACL、JWT、SSL等,有限的RateLimiting,可管理的RestAPI交互性能也比较高。所以我又改了一遍,以后你的数据量会变大。这个时候你还在用mysql的全文检索索引,这是很不现实的。这时候你就得考虑使用搜索引擎了。ElasticSearch主要是老外用的。当然,laravel也支持ElasticSearch。可惜这东西太耗资源了。我们终于用上了xunsearch。虽然这个东西有时候不准确,但至少可以用。。。但是配置起来没有ElasticSearch方便。这里使用搜索引擎搜索产品,需要使用队列或者定时任务来同步xunsearch和mysql的关系。2019年9月,是实体经济不景气导致系统过于稳定的尴尬时刻。大老板不想再开发系统了。技术部要解散了,我跟老板和经理坦白了。回到招聘工作的旅程。不知道能不能胜任建筑师这个职位,因为看了描述,几乎都是本科学历。我想我可以做前端/php/全栈职位。我也开始投票了,但是,我该怎么说呢。我也照顾过人。虽然技术不是很好,但是处理业务的能力还是有的。你不能因为我的学历和年纪小就压低我的薪水。九月底,我决定跳出中山的环境。去广州的两家公司面试,感觉做不到以前做的事情。如果我想回去做coder,能玩的东西会越来越少。最后不知为何,遇到了一家创业公司的邀请。就这样又回到了之前的工作内容需求分析、业务梳理、架构搭建。现在boss比较成功,可以让平台达到300wpv的巅峰。我觉得现在的pv还是可以的,每天都有10v,但是之前的系统bug比较多,系统也不是用设计模式开发的。满是代码,技术总监就走了。申请重构代码,重组一些不合理的业务,然后架构变一个状态,重新从头开始。可怜的程序员又蠢又蠢。现在的问题是docker部署在不同机器上的时候,开启端口映射很麻烦,所以以后需要做的就是学习k8s,mysql以前多用orm,现在为了提高这个方便知识,偶尔会写sqlapi层,减少查询次数。SQL我使用的是基于小米的soar-web。