时间过的很快,从一个小公司跳槽的58同城已经一年啦(去年5月26日正式入职)。虽然58同城比起一线互联网企业仍是有着差距,可是对于从小公司出来的我,受益仍是匪浅的,本身不论技术仍是眼界都有了很大提高 ,加上作的项目是从0到1的内部创新项目,感悟会更为多一,下面整理下这一年来的相关收获和相关落地方案。(文笔很差,想到哪里就说到哪里)前端
1.数据驱动java
相信每一个互联网公司都会很是重视这一起,都有本身的数据可视化平台,能够查到每一个业务线的详细数据。这些是业务数据,能够提供相关参考,作相关业务调整和战略发展。除了公司层面的数据平台,各个业务线也有本身关心的数据指标,一切用数听说话。大的方面不用强调,这里就从一些小的方面说一些数据驱动。根据业务创建相关数据指标,造成数据漏斗,产品和研发,能够看到漏斗每一层的相关数据和转化率,才能围绕漏斗提高作相关改进,业务推展才能有序推展。因此程序员们要有数据意识,多关注数据变化,用数据驱动业务发展。linux
好比咱们的新项目,从一开始就创建了相关数据指标,数据报表天天邮箱会收到10几个程序员
包括:用户行为数据,总体数据,A/B测数据,埋点统计,渠道来源数据,增加数据,流量数据,具体业务的漏斗数据,人效数据,具体业务的统计数据,项目执行进度,核心数据的变动记录等。web
2.监控/报警/脚本 面试
随着业务的不断发展,站点和服务愈来愈多,互相之间的依赖也比较多。出了问题程序员要第一时间感知到,所以监控和报警是很是重要的。公司层面确定有相关的监控和报警方案,好比58的先知系统,能够设置http请求的超时阀值报警。服务平台管理也能够设置分布式服务的访问量,抛弃量,异常量的报警。架构部的平台也能够看到整个系统,从上到下的请求链,每一个方法的请求时间,以及各个服务的访问量,访问时间,异常量等等。sql
本身的业务线也能够围绕着服务是否可用,作如下的监控,脚本都比较简单,参考网上的一些例子应该就能够很快实现。shell
站点存活的心跳检测,好比某个服务挂了,致使站点不可用数据库
硬盘的监控,常常会出现一些程序打日志,把硬盘给快跑满了。后端
数据库的相关检测,好比检测请求量,数据库链接。
缓存服务检测,好比缓存服务的内存使用状况,链接状况。
数据库检测,好比查看是否有脏数据。
实时任务的检测,好比监听消息总线,是否有消息堵塞,日志是否滚动。
服务的日志检测,好比查看相关站点的日志,看里面是否有程序异常,发送相关报警
...
其实监控程序也不复杂,基本上都是一些简单的shell命令经过crontab,链接相关服务,查看数据是否异常,发送短信报警(把发短信功能作成一个http请求,经过crul 或者wget 调用接口传参短信报警)。
另一个须要强调的服务性能监控,也是程序员须要注意的地方。
好比,咱们对公司的分布式服务作了一个监控插件,里面有一个全局过滤器,每一个请求都会进行统计,定时发送到另一个服务中进行计算和报警。天天会有报表,统计各个服务的请求次数和每一个接口的请求时长,以及超时接口排名。不少问题均可以经过这个监控得以发现,好比某个服务或者某个接口的平均访问时间过长,就须要进行优化。有段时间老大天天都会订着报表看,咱们就须要想着办法进行优化。只有对服务的性能有清楚的认识,才能保证系统的可用性。
另外要对各个站点和服务,进行日志采集和监控,以报表的形式反馈出来,是程序员就会出bug,咱们也不能一天到晚订着日志。因此经过这些监控,咱们能够看到服务的相关问题,进行解决。
3.会用linux,懂shell
58核心业务不清楚,反正本身的业务线,程序员(RD)和测试(QA)均可以拿到服务器的相关权限,58这边由QA负责部署上线,可是RD有时候也须要本身动手。包括部署站点,部署服务,杀进程,启服务,写脚本,运行脚本,查看日志,异常定位分析,因此程序员们要懂linux的经常使用命令,另外java相关的监控命令也要知道
4.不只仅只有web应用
作后台开发的,不只仅局限于web开发,除了前面提到的不少shell脚本,平时工做涉及的好比邮件报表,esb消息队列任务,业务定时任务都是独立于web程序的任务。好比用java作一些定时任务,以前业务线基于Quarz封装了一个任务框架,或者本身写java方法,经过contab定时调用。不少java程序员可能脱离了web容器,都没单独写过java应用。
为何面试的时候会问jvm的相关问题? 除了一些框架和服务提供的配置以外, 本身写java应用也是要用到这些的,设置相关jvm参数,加载相关的资源,传参获取环境参数等等。
5.不只仅只有数据库
假如须要是作一些数据统计,以前可能都会想办法把数据存在数据库中,经过数据库的sql进行统计。好比回复短信的人都会哪些,有多少人参与了这个活动。其实不少数据不是业务相关的,均可以考虑用其余办法。好比记日志,从日志分析获取数据。好比pv,uv,用户行为分析,浏览记录,后台的操做记录等等,均可以经过日志记录下来,经过日志清洗获取相关数据。
目前58的大数据平台基本上流程就是: 业务线埋点,输出log,flume采集日志到hdfs,经过mr清洗日志到hive。基本上作好数据埋点,不少数据统计都不须要改程序,传递不一样参数,经过hive就能够进行数据统计
6.都是单表查询
以前使用oracle,线上使用各类链接查询,聚合函数,存储过程。如今线上要求都是单表查询。容许数据库表冗余,要么单表查询,要么在业务中组装数据。
若是数据量大就分表 , 若是数量大且并发大,分库分表。 设置好主键生成策略和路由策略。在数据库上层封装一层查询索引,根据条件索引查询id串,根据id串去各个数据库并行查询。另外数据量到另一个级别,就可能须要nosql的解决方案了,好比58内部的WTable。
固然一些统计相关的能够用一些连接查询,可是生产环境不能使用。
7.并发/缓存
58的用户量仍是比较大的,业务中不免会涉及到58的相关业务。好比咱们经过esb消息总线拿到数据,一天处理几百万或上千万的数据。或者对大数据平台天天几百T的数据作分析,跑任务。接触到业务逻辑和遇到的问题,也是小公司通常不多遇到的。因此并发相关的问题,多多少少也都会遇到。
另外作一些活动运营,或者服务接到主站服务中,都须要考虑服务的并发请求量,考虑QPS。目前本身了解的相关指标,web站点达到600QPS,服务达到2000QPS,剩下就能够堆机器了。若是想提高QPS,简答的就是加缓存,可是固然有不少业务场景不是加缓存就能够解决的。
8.全栈
公司比较大,作的业务分的就比较细,好比由美工作设计和页面,由前端负责作页面和js交互,其实后台程序员只用写好服务就行。所以校招的程序员大部分对前端js都不熟悉也不多用到。可是对于写管理系统的,没有前端FE支持,可能就须要先后端通吃了。不过不少人仍是很优秀的,很快就能够学习上手的。
9.解决方案都有
毕竟公司不算小,除了公司的核心重量级业务,各业务线都不会遇到太大的技术瓶颈。开发过程当中,遇到问题,基本上均可以找到各类办法去解决。因此遇到问题,去聊,去搬。技术上都不是问题,只要有人,很短的时间,pc,m,app三端就出来了。
10.开发流程
58的开发量程还算是比较正规的,通常都会提早要求PM需求,RD体现批注需求,而后进行需求评审,技术评审,RD排期,开发,提测,上线。RD须要对排期负责,保证开发进度。
11.技术体系,述职
58技术体系,走的是T序列(参考百度),校招基本T3, T4就是高级程序员了,T5基本上都是组长了,业务线从T4到T5是一道坎儿。T序列升级须要述职,感受仍是比较有难度的。公司大部分应该是T4的。因此在公司若是混日子,基本上是待不下去的。因此平时在开发中,就须要考虑完整的技术方案,作好相关设计,这样述职的时候才会比较轻松。
58内部也会有各类技术讲座,也会邀请业内的大牛,总体技术氛围仍是不错的。
12.公司的发展变化
虽然来58基本没接触到主站的相关业务,可是也见证了公司的一些变化。好比去年公司全部业务线切换到腾讯云机房,58大数据平台换了两版,愈来愈高大上。提供了hive的云窗,能够直接开放给pm去查询数据。
架构部的服务平台,提供了先知系统,scf服务管理,wcache,wlist,wtable等本身的服务。前段时间换logo,三端改版。互联网公司确实变化比较快。因此程序员也要不断提升,才能够跟上公司的步伐。