随手记:总结
{
1.2013-6月份毕业,2014-6-23在达内培训完,就职于济南巨数信息薪资3000元,此时懂得不多,除了uc 和c++写写简单的网络编程,处理问题思维开放外,想ctdb,lvs,dns,长连接,网络的原理(网卡,网管,路由,域名服务器),python,前端页面html,js,shell脚本,apache,tomcat,nginx,tornado,php,ruby,hadoop,stmp,snmp,ntp,samba,sendmail,mysql,sqlite,pop3,yum,inux系统优化,知之甚少。。。更不用说解决的问题
2.来到公司 第一个小项目是 tfsweb的测试
测试:
需要:测试用例,测试环境
测试分为:{在对测试对象了解程度上分成了 黑盒测试,白盒测试}
{在针对侧重点上分为功能测试,性能测试}
测试用例的测试内容:测试内容要根据 产品的每个需求来 细分测试点
测试阶段:测试分为building阶段,即开发内测;测试通过 再由第三方测试;测试通过后上线,有问题再改。(这可能不正规)
行动:测试主要是自己根据需求写一些shell脚本,或用c或c++、python写程序对相应接口进行测试。
感想:当时测试时,并没有去先了解 测试(测试的目的,测试的种类,测试的正规流程,测试的表达样式即测试用例的格式,测试的处理方式(如何处理bug),有没有现成的测试流程系统可用,同行业的测试,都),当时测试很零散,没有一个测试流程,也没有去了解测试目的,只是想当然的决定,测试就是为了找出bug,并没有想最主要的目的是什么(是客户有需求,所以才做了软件,软件没有达成顾客的需求所以才叫bug,所以测试针对需求),测试中出现的问题如何解决(测试系统中的提交,针对到某一个测试点(出现问题的环境),解决问题想要的时间)。
3.tfsweb测试完成后,进行ctdb,和 lvs的搭建,了解搭建一个服务 或使用一个库 一个编程语言
这里以lvs为例
了解:什么问题亟待解决,才会出现了lvs(当一个(高并发tcp)服务,在一台机器上运行时,硬件上是有连接数的极限,并且一台机器一直高负荷运行,使用年限,和出现问题的频率,不断更新机器费用上,为了①突破硬件极限,来提高性能,②增加机器寿命,来减少成本,③均衡负载,来减少出错次数,提高可用性。)
行动:从运行环境(依赖关系,依赖的库)入手,工欲善其事必先利其器,环境有了,就从hello world的等级开始,这很重要(增加兴趣和自信),然后根据需求(一切的目的在于需求,你的需求,即你用它来解决什么问题)完成搭建。
验证:如何判断你的 库,你的环境,你的服务搭建成功,一般有命令或程序来验证
笔记:整个过程 记录在案,方便以后搭建
总结:对该软件的优缺点进行总结,给出建议。
4.搭建玩完vs和ctdb的组合环境后,又进行了 企业邮箱的搭建,和http访问svn搭建
了解:企业邮箱解决了
①公司内部信息的安全性,服务器使用的自己公司内部,
②对公司人员根据部门进行分组,可以的对一个组进行发邮件,提高了效率
③使用自己的域名,公司的正规性
行动:企业邮箱运行环境(smtp(发送邮件的server服务)、pop3(80年代以前--接受邮件的server服务,client端读取邮件后,server会把邮件从服务器上删除)、IMAP(新款80年代--接受邮件server服务器,将邮件分类整理,读取邮件后不会在服务器端删除邮件)、sendmail(mail服务,解决了3个需求,添加用户)、openwebmail(web服务)、apache(http服务器))
1.安装apache,从页面访问一个hello world页面
2.安装IMAP、SMTP、sendmail、实现局域网内邮件收发
3.安装web,把apache和sendmail连接起来。
4.进行ICP工备案--》域名,域名持有人照片,身份证,公司证本号、阿里云服务器编号-》等待通过-》备案号和密码。
5.对tfsweb系统的二次开发,和优化。
二次开发要求,对一个陌生的的程序添加自己独有的需求来解决客户的问题。
程序:逻辑(架构,如:多线程、多进程、事件驱动epoll,select)、业务(请求和响应,如:请求处理和响应处理函数。)、配置文件(IP,port,等等)
行动:
1.对原程序使用的完全掌握,(包括:搭建,所有操作)
2.修改和添加业务(一般的二次开发,框架是很少去改动的(一个好的程序框架是健壮的),优化开发 以业务为主(增加什么功能,修改什么功能,去掉什么地方)),一般有文档或例子,安部举办即可,没有的就需要去了解这个框架,开源框架例子很多,自己写的。。跟踪日志 先找分发函数--》分发的的各个类--》各个业务实现 如:
修改A功能:-》一边看日志一边操作A功能,来跟踪对应代码
添加A功能(自己先完成一个独立的A功能):-》在分发函数,添加A功能类-》测试
3.优化框架(二次开发到第2步就可以,第3步主要是优化:如果对程序架构改动量很大的话,建议自己重写一个,或使用开源框架。):优化的目的:提高稳定性(保证长年运行下去,不会有cpu、mem高占用,卡死等等状况),反应速度(页面的响应速度,大文件传输的压缩率,局部响应ajax,配置文件优化不用重启自动加载)
4.文档整理,日志优化,添加必要注释(部署文档(部署环境,依赖关系、安装步骤、问题解决方案),日志设置等级,注释方便以后自己修改)
实例:客户的问题 1.有些功能为实现 2.有些功能操作时有问题 3.添加程序的实时性,去掉数据库(sqlite)。
tfsweb采用tornado架构(高性能python http服务器框架)web服务和一个自己写的server端(负责 agent交互,tfsmaster交互、sqlite交互)、页面(以bootstrap样式为主样式的,的网上开源的后台页面)、配置(配置项很多明知故写,给一般用户太多权限)
根据 行动2 跟踪日志,和浏览器日志chrome,找到对应的业务函数,明确它目的的前提,来读懂他的代码。再进行更改;
根据其他业务的实现,找到一个业务实现的整个过程,从客户端请求-》分发函数-》业务实现,按照整个例子,添加一个自己的功能,测试。
去掉数据库,需要找每个对数据库进行操作的函数,进行修改。
总结:(用户是没有理论知识的,所以有些操作,给他一个条条框框限制住他,使他的操作有限可控。)
6.tfsweb2 优化,验收通过后,重心以raid卡为主
1.raid卡项目讨论(架构(1主对多从,对树形结构是高效的,对web多对多是低效(配置文件是高效解决方案)),传输协议(protobuff),框架(父进程监控,子进程线程池处理),逻辑业务(map分发-》逻辑处理函数--》logic的具体实现-》结果返回给主控))
2.调用raid的库文件,包装一下库反馈的结果,结果返回给 主控
3.raid卡的库 自带了一个test命令,每个函数都是根据,这个程序进行的拆分作为实现。
总结:通过这次开发,我对整个开发流程有个一个详细的认知,掌握了开发流程,对开发充满自信
反思:开发的周期要预留出2倍以上的时间,给自己预留余地,开发过程要有 主次先后(保证先开发的东西可以给用户使用,未开发的功能,用户未察觉(隐藏))
7.raid卡开发完毕后,又接受了 2个程序的迁移(租这儿网,和),和一个java程序的部署(地主汇,web端,和安卓端)
1.使程序在新的环境中能正常运行,可访问和使用。
了解:1.通过接触到这个几个项目,了解到 数据库(mysql)的重要性,mysql的远程访问,用户添加,设置编码格式,导出,导入。一个web2.0的网站,用户的数据都存储在 数据库中。
2.地主汇是java程序,他需要的环境为apache(或nginx)服务器,tomcat(动态页面服务器),mysql,jdk(java运行环境),2个java程序可以配置2个tomcat启动这个两个java程序。
3.租这儿网是ruby程序,采用了rails框架来完成的。同样需要nginx(apache),mysql,ruby(未接触过,需要了解按步骤),rvm(类似于yum)没有文档,不知道还需要什么
行动:最后 租这儿网 没成功,主要原因,前期没有先去按照步骤了解(ruby),花了很多时间,再者,后期需要很多插件,这些插件很多无迹可查,再加上在root下操作的习惯,在某个用户下没有经验,ruby的环境搭建的有问题。后期的从雅虎把域名转出上,因为环境问题,也未能成功。从失败中,反思得出了,了解学习一个语言的过程,和部署文档的重要性,还有错误日志也是查找依赖关系的依据。
8.因为做的是存储,所以我去了解了同类产品 ceph,glusterfs ,通过对同行业的产品的了解,让我接触到了很多优秀的框架和思想,为后期的 gangla等监控系统的学习 ,为tfsweb3尊定了坚定基础。
9.tfsweb3的设计和开发。
前期调研(了解同类产品): 前期通过对同类产品的了解、使用,和对开发流程的认识,一些大产品的思想,集10个月的所有成果结晶。
①tornado很高效便捷,所以继续沿用,agent端以前采用c和c++写的,架构上有潜在漏洞,考虑过boost库的框架,但是c++开发周期上要比python长几倍,性能又不要求极致,所有决定采用python开发,后来发现twisted框架,tornado就是基于它开发的,很多游戏也是次优的twisted框架,通过了解使用几个例子,发现很便捷。
了解(需求):①对tfs多机的支持(主要)
②对每个cluster上服务的监控和设置
③信息的实时性,去掉对数据库的强依赖性
④安装部署的简洁性,很对用户的限制
行动(设计,开发):
(框架)①web采用1对多对多架构,一个代理对多个web对多个agent,web只负责接收客户端请求分发,去除繁琐的agent的主次关系agent只负责处理并返回结果,集群内配置文件要一致,配置文件要注明集群内主机的IP和port。
(架构)②web采用tornado架构,agent采用twisted架构,二者都以deaom形式运行,日志写在/var/log/目录下。web启动要指定配置文件路径
(开发)③开发以agent为开始,然后web,界面依旧采用bootstrap样式,开发周期*3进行申请,最后要 实际开发时间*2的周期来完成,2个月的时间挺清闲,本可以提前完成的,但是心态上没有及时调整,也比较懒散,很颓废啊····,完全不积极,值得反思,“不做垃圾”,“超越自己”
(测试)④书写测试用例,功能测试通过后,性能测试不是很理想。后期以优化
(总结)⑤部署(需要依赖的库,环境)文档,设计文档的完善,接口文档的书写
10.看一些运维精英的 博客,高性能服务器集群了解,他们的职业经验中遇到的问题,解决的问题。
11.自己的几个项目:
}