【回忆录】看看一个菜鸟程序员在创业公司2年都经历了什么...
作者:互联网
N年前,我以一个菜鸟的身份,进入了一家创业公司 我原本以为公司是这样的… 但是实际上是这样的…
我进去时,我们部门除开部门老大,还有我,还要我,只有我…和我的老大
所以,我就这样开始了我的程序员生涯…,开始了我的苦逼技术之旅…
公司是做电商网站的,因为我是个菜鸟,所以我接到的第一个任务就是做一个网页,这时我学会了:
- HTML:用来布局网页
- CSS:用来美化网页
- JavaScript:用来做点击跳转,窗口弹出
但,某天,老大跟我说,真正开发时需要用一些开发框架和组件来快速开发,所以我学会了:
- JQUERY:极大简化了JavaScript的编程方式
- BootStrap.js:可直接套用其好看的样式进行快速开发
经过加班加点,网页总算开发完成,我兴冲冲的告诉老大我完成了,老大看了一眼,冷冷的说了声,浏览器兼容做了没?所以我用IE打开了我的成果,一看…为什么会这样…没关系的,加油,接下来我下载了:
- 谷歌浏览器
- 火狐浏览器
- IE6,7,8,9浏览器
- 360安全浏览器
- 360极速浏览器
与这些进行了艰苦的斗争,最终我赢了,同时也赢得了老大的第一次赞赏!
第二天,新任务来了,老大说,现在这个网页是静态,需要改成动态的…
紧接着,我学会了:
- Ajax,用来进行前端调后端接口
- Json,后端接口返回的数据的一种格式
- Spring:轻量级的快速开发框架
- Spring MVC:一个快速开发Web应用框架
- FreeMarker:一种服务端模板引擎
- HttpClient:一个Java实现的Http请求客户端
- Mybatis:一款优秀的持久层框架
- Mysql:一个国内最流行的数据库软件
- Maven:一个项目管理工具,可以对 Java 项目进行构建、依赖管理
- Tomcat:使用得最多的Servlet容器,可以用来接收浏览器请求
往后几个月工作和生活的重心就是上面这些技术…
突然,有一天,公司来新人了,我总算不是孤单一人了,这时老大跟我说,要用一些项目管理工具…所以我又学会了:
- Git:一个代码版本管理工具
- GitLab:一个项目管理和代码托管平台
- Nexus:一个强大的Maven仓库管理器,它极大地简化了自己内部仓库的维护和外部仓库的访问
- 禅道:第一款国产的开源项目管理软件,完整地覆盖了项目管理的核心流程
- jira:Jira融合了项目管理、任务管理和缺陷管理,许多著名的开源项目都采用了JIRA
有了这些管理工具,老大说,除开上面这些,还需要一些自动化构建工具,这样能使得开发测试上线更加顺利,所以,我学会了:
- Docker:一个开源的应用容器引擎
- Jenkins:一个开源的、提供友好操作界面的持续集成(CI)工具
一套自动化开发测试被我搭建起来了,有了这一整套项目开发管理工具,我们的小团队合作的非常愉快,不久,我们网站的核心功能开发得差不多了
这时老大说,为了上线之后能够有保障的运行,我们需要给我们的网站配套一套监控和日志系统,这样我们搭了:
- Prometheus:一个开源的服务监控系统和时间序列数据库
- Grafana:一个开源的、功能齐全的度量仪表盘和图形编辑器
- Zabbix:一个企业级分布式开源监控解决方案
- ElasticSearch:一个实时的分布式搜索分析引擎
- Kibana:一个能对日志进行高效的搜索、可视化、分析等各种操作的平台
- LogStash:一个应用程序日志、事件的传输、处理、管理和搜索的平台
- Log4j:一个可以控制日志信息输送的目的地的开源组件
- Logback:og4j创始人设计的另外一个开源日志组件
搭完这一套,网站上线了,一段时间后,网站的用户慢慢在增多,我们通过我们的监控系统,发现有几个核心应用压力在不停地增加,老大说我们要做负载均衡了,所以我了解到了:
- nginx:一个高性能的HTTP和反向代理web服务器
- lvs:一个虚拟的服务器集群系统
- keepalive:一个可以检测web服务器的状态的服务
最后我们通过使用nginx并增加几台服务器来做了负载均衡,不过老大继续说,仅仅做负载均衡还不够,我们可以把热门商品给提前缓存起来,所以我又学到了:
- Redis:一个高性能的key-value数据库,对关系数据库起到很好的补充作用
- Jedis:一个Redis 官方首选的 Java 客户端开发包
- Redisson:一个在NIO的基础上,为使用者提供了一系列具有分布式特性的常用工具类
这样,我们的网站访问速度提升了,有一天,老大说,我们要做一个订单状态变更短信通知的功能,说用消息队列来做,让我来做一次技术选型,我又学了:
- RabbitMQ:是一款高性能、搞健壮性以及高伸缩性的消息队列中间件
- Kafka:是一种高吞吐量的分布式发布订阅消息系统
- RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务
最后,我选了阿里的RocketMQ,并跟老大进行我选型的思路,受到了老大的认可,升为了研发组长…
随着业务的发展,某天,老大说,我们要对我们的项目做一次重构,改成分布式微服务架构,让我学习一下:
- Dubbo:阿里开源的高性能RPC调用框架
- Spring Cloud:一个为开发人员快速构建微服务架构的开发框架
- Zookeeper:一个集中式服务,用于维护配置信息、命名、提供分布式同步和提供组服务
- Netty:一个高性能网络应用框架
- Xxl-Job:一个轻量级分布式任务调度平台
- Elastic-Job:一个分布式调度解决方案
接到这么重的任务,我抓紧自己的每一秒来学习这些技术,最后,我跟老大说,我们用Spring Cloud,他所提供的几个组件太强大了,比如:
- Nacos:一个动态服务发现、配置和服务管理平台
- Ribbon:一个在客户侧提供软件负载均衡算法的组件
- Feign:一个更强大好用的Java HTTP 客户端库
- Sentinel:一个面向分布式服务架构的高可用流量防护组件
这样,我们很长一段时间,陆陆续续的将我们的项目重构为了Spring Cloud,重构完后,我们喝了一顿…
紧接着,我们进入了告诉发展期,这期间,我了解到了:
- 敏捷开发:一种新型的互联网开发模式
- 迭代:敏捷开发过程中的周期概念
- 看板:敏捷开发过程中最重要的效能工具
- DDD:一种微服务拆分设计思想
等等开发设计理念…
直到有一天,出事了…,我们网站瘫痪了,赶紧的,一看监控,数据库压力爆了,我们通过调整限流等措施,暂时得到了缓解,事后,老大严肃的跟我们说,我们要分库分表了,所以我又去学了:
- Mycat:一个彻底开源的,面向企业应用开发的数据库中间件产品
- ShardingSphere:一套开源的分布式数据库中间件解决方案组成的生态圈
经过一顿苦战,分库分表也被我们搞定了,不过老大说,还不够,我们还要做到自动扩缩容,所以我学到了:
- kubernetes:一个来自 Google 云平台的开源容器集群管理系统
- openshift:一个由红帽推出的面向开发人员的Paas
在这个过程中我了解到一些概念:
- ServiceMesh架构:下一代微服务架构
- Serverless架构:用来构建和运行不需要服务器管理的应用程序
- 云原生架构:一种结合云环境,充分利用云资源的架构
经过努力,我们的网站做到了自动扩缩容,很是强大,整个网站的开发也渐渐进入了平稳期…
两年时间,我很幸运,我学到了很多技术,这只是我经历的第一家公司,很感谢这家公司和我的老大,但是,我知道外面的世界很大,需要我走出去,然后,我跑路了
标签:...,老大,一个,菜鸟,程序员,开源,开发,我们,分布式 来源: https://blog.csdn.net/qq_41770757/article/details/118074493