在这敏捷开发横行的时代中,人人都在谈敏捷,人人都在谈迭代,似乎大家好像都尝到了敏捷带来的甜头,记得有一次跟朋友吃饭,说他们现在的项目用敏捷开发,每个迭代都能看到不断完善的产品,非常有成就感,客户的满意度也提升了不少;另一个朋友说,我们用迭代开发,也是这样,而且客户想加什么需求就加什么,直接按照优先级排到迭代周期就行,也不用为改需求而烦躁。当时我就想,敏捷开发不就是分迭代周期的吗,他俩好像说的是一回事吧。回去过了好长一段时间,突然想起这件事了,在网上一查,还真不是一回事… 继续阅读
分类目录归档:IT圈热闻
Google SRE 参会总结
Google SRE 参会总结
近期有幸参加了一个小型的运维会议,同《SRE:Google 运维解密》的译者进行面对面的沟通,收益匪浅。会议上大家的讨论非常热烈,话题主要集中在以下几个方面:
什么是SRE,职责是什么?
SRE全称Site Reliability Engineering,是Google内部的一个运维职位,主要职责是保障服务的可靠性和性能,同时负责数据中心资源分配,为重要服务预留资源,该职位不负责某个具体业务的上线和部署。
SRE分为产品SRE和平台SRE。产品SRE负责某个具体产品相关的所有组件的运维,而平台SRE则负责诸如主机计算能力,数据库资源等PaaS资源。按照我个人的简单理解,前者是以业务为单位的纵深管理,后者是以平台为基础的横向管理。不论何种SRE,在我看来,这个职位都对个人能力有较高的要求,非传说中的全栈工程师莫属。
继续阅读
Google SRE:运维还能如此高逼格?
SRE是Site Reliability Engineer的简称,从名字可以看出Google的SRE不只是做Operation方面的工作,更多是保障整个Google服务的稳定性。SWE是SoftWare Egineer的简称,即软件工程师(负责软件服务的开发、测试、发布)。SWE更新的程序代码(下文称为server),只有在SRE同意后才能上线发布。因此,SRE在Google工程师团队中地位非常高!
Google SRE:运维还能如此高逼格?
SRE是Site Reliability Engineer的简称,从名字可以看出Google的SRE不只是做Operation方面的工作,更多是保障整个Google服务的稳定性。SWE是SoftWare Egineer的简称,即软件工程师(负责软件服务的开发、测试、发布)。SWE更新的程序代码(下文称为server),只有在SRE同意后才能上线发布。因此,SRE在Google工程师团队中地位非常高!
- 作者:王璞来源:高效运维|2015-07-27 17:21
嘉宾介绍
王璞,数人科技创始人。2002年获得北京航空航天大学力学学士学位,2007年获得北京大学计算机硕士学位,2011年获得美国George Mason University计算机博士学位,研究方向机器学习,发表十余篇机器学习以及数据挖掘相关论文。毕业后在硅谷先后供职StumbleUpon、Groupon和Google三家公司,负责海量数据处理、分布式计算以及大规模机器学习相关工作。2014年回国创办数人科技,基于Mesos和Docker构建分布式计算平台,为企业客户提供高性能分布式PaaS解决方案。
引言
SRE是Site Reliability Engineer的简称,从名字可以看出Google的SRE不只是做Operation方面的工作,更多是保障整个Google服务的稳定性。SRE不接触底层硬件如服务器,这也是高逼格的由来:
Google 数据中心的硬件层面的维护工作是交给technician来做的,technician一般不需要有大学学历。
SWE是SoftWare Egineer的简称,即软件工程师(负责软件服务的开发、测试、发布)。
SWE更新的程序代码(下文称为server),只有在SRE同意后才能上线发布。因此,SRE在Google工程师团队中地位非常高!我们下面将分别介绍。
备注:我本人是SWE,本文是从SWE的角度看SRE,我的老朋友@孙宇聪同学是原Google SRE,他会从另一个角度来阐述此主题,敬请期待哦!
1. SRE 职责
SRE在Google不负责某个服务的上线、部署,SRE主要是保障服务的可靠性和性能,同时负责数据中心资源分配,为重要服务预留资源。
如上文所受,和SRE想对应的是SWE(软件开发工程师),负责具体的开发工作。
举个例子,我之前在Google的互联网广告部门,我们team负责的server是收集用户数据用于广告精准投放,这个server的开发、测试、上线部署等工作,都是由SWE来完成。
SRE不负责server的具体实现,SRE主要负责在server出现宕机等紧急事故时,做出快速响应,尽快恢复server,减少服务掉线带来的损失。
备注:这里的server是指服务器端程序,而不是物理服务器。在Google,SWE和SRE都无权接触物理服务器。
2. SRE 要求
因为SRE的职责是保障服务的稳定和性能,所以在SRE接手某个server之前,对server的性能和稳定性都有一定的要求,比如server出现报警的次数不能超过一定的频率,server对CPU、内存的消耗不能超过预设的指标。
只有server完全满足SRE的要求以后,SRE才会接手这个server:
当server出现问题时,SRE会先紧急修复,恢复服务,然后SRE会和SWE沟通,最终SWE来彻底修复server的bug。
同时,对server的重大更新,SWE都要提前通知SRE,做好各种准备工作,才能发布新版server:
为了能让SRE能接手server,SWE要根据SRE的要求,对server做大量的调优。首先SRE会给出各种性能指标,比如,服务响应延迟、资源使用量等等,再者SRE会要求SWE给出一些server评测结果,诸如压力测试结果、端到端测试结果等等,同时,SRE也会帮助SWE做一些性能问题排查。
所以SRE在Google地位很高,SWE为了让server成功上线,都想法跟SRE保持好关系。
我举个具体的例子来说明,在Google,SWE是如何跟SRE配合工作来上线server的。
我们team对所负责的server进行了代码重构,重构之后,要经过SRE同意,才能够上线重构后的server。
为此,我们team的SWE要向SRE证明,重构后的server对资源的开销没有增加,即CPU、内存、硬盘、带宽消耗没有增加,重构后的server性能没有降低,即端到端服务响应延迟、QPS、对压力测试的响应等这些性能指标没有降低:
当时对server代码重构之后,server有个性能指标一直达不到SRE的要求。这个指标是contention,也就是多线程情况下,对竞争资源的等待延迟。重构server之后,contention这项指标变得很高,说明多线程情况下,对竞争资源的等待变长。
我们排查很久找不到具体原因,因为SWE没有在代码中显式使用很多mutex,然后请SRE出面帮忙。
SRE使用Google内部的图形化profiling工具,cpprof,帮我们查找原因。
找到两个方面的原因:
- tc_malloc在多线程情况下频繁请求内存,造成contention变高;
- 大量使用hash_map,hash_map没有预先分配足够内存空间,造成对底层tc_malloc调用过多。
3. SRE 工作内容
简而言之,Google的SRE不是做底层硬件维护,而是负责Google各种服务的性能和稳定性。换句话说,Google的SRE保证软件层面的性能和稳定性,包括软件基础构架和应用服务。
SRE需要对Google内部各种软件基础构架(Infrastructure)非常了解,而且SRE一般具有很强的排查问题、debug、快速恢复server的能力。
我列举一些常见的Google软件基础构架的例子:
- Borg:分布式任务管理系统;
- Borgmon:强大的监控报警系统;
- BigTable:分布式Key/Value存储系统;
- Google File System:分布式文件系统;
- PubSub:分布式消息队列系统;
- MapReduce:分布式大数据批处理系统;
- F1:分布式数据库;
- ECatcher:日志收集检索系统;
- Stubby:Google的RPC实现;
- Proto Buffer:数据序列化存储协议以及RPC协议;
- Chubby:提供类似Zookeeper的服务。
Google还有更多的软件基础构架系统:Megastore、Spanner、Mustang等等,我没有用过,所以不熟悉。
4. 运维未来发展方向
我个人觉得,在云计算时代,运维工程师会慢慢向Google的SRE这种角色发展,远离底层硬件,更多靠近软件基础架构层面,帮助企业客户打造强大的软件基础构架。
企业客户有了强大的软件基础构架以后,能够更好应对业务的复杂多变的需求,帮助企业客户快速发展业务。
另外我个人观点,为什么Google的产品给人感觉技术含量高?
并不见得是Google的SWE比其他Microsoft、LinkedIn、Facebook的工程师能力强多少,主要是因为Google的软件基础构架(详见上文)非常强大,有了很强大的基础构架,再做出强大的产品就很方便了。
Google内部各种软件基础构架,基本上满足了各种常见分布式功能需求,极大地方便了SWE做业务开发。
换句话说,在Google做开发,SWE基本上是专注业务逻辑,应用服务系统(server)的性能主要由底层软件基础构架来保证。
————我是分割线————
下面就是本次分享的互动环节整理(真的非常精彩哦:)。
问题1:SRE参与软件基础项目的开发吗?
SRE一般不做开发。比如Google的BigTable有专门的开发团队,也有专门的SRE团队保障BigTable server的性能和稳定性。
问题2:一般运维工具,或者监控,告警工具,哪个团队开发?
SRE用的大型管理工具应该是专门的团队开发,比如Borgmon是Google的监控报警工具,很复杂,应该是专门的团队开发,SRE会大量使用Borgmon。
问题3:基础软件架构有可以参考的开源产品吗?
Google内部常见的软件基础构架都有开源对应的版本,比如Zookeeper对应Chubby,HDFS对应Google File System,HBase对应BigTable,Hadoop对应MapReduce,等等。
问题4:还有SRE会约束一些项目的性能指标,比如CPU和内存的使用阈值,这些值是从哪里得来的?或者说根据哪些规则来定制的?
SRE负责Google的数据中心资源分配,所以一些重要server的资源是SRE预留分配好的。对CPU、内存等资源的分配,SRE按照历史经验以及server的业务增长预期来制定。
此外Google数据中心里运行的任务有优先级,高优先级的任务会抢占低优先级任务的资源,重要的server一般优先级很高,离线任务优先级比较低,个人开发测试任务优先级最低。
论高可用的“妙”处
论高可用的“妙”处
在互联网行业中高可用,目前看来有三种用法。分别是:
1.业务量的增加后,由于市场的需要必须保障核心业务的稳定性。我在这里把称之为 “正常”模式。
2.业务量根本还没有,而且还是新上项目。但是由于服务的启动导致时间的延长(上分钟不能提供服务),所以要做多节点部署
要用前端的高可用,来解决这种程序不能立马提供服务的问题。这种我在这里称之为“斗比”模式。
3.平台不差钱,流量和业务都没有增加也没有接入前。就考虑了高可用。多节点这种,我在这里称之为“高富帅”模式
正常模式,我在这里不谈论。因为市场决定一切、核心服务的强需求,理所当然的。今天的我的观点主要在斗比模式的高可用。
斗比模式的高可用有几个问题。
由于服务的这种延迟启动,导致必须要借用“高可用”的“斗比”模式来进行解决了。比如下面的流程:
1.由于服务的启动时长,不能及时的提供服务。在部署的时候,需要发布成多节点。
需要在升级的时候,先要在摘掉负载均衡上第一个斗比节点。然后升级,升级启动几分钟的时间内,由于服务本身还未启动。然而tomcat(这里指某个基于tomcat的一些java业务服务)
端口已经启动,显然这个时候不能将节点放入负载均衡。那么将进入几分钟漫长的等待(这个时候千万要祈祷java线程别崩溃)后,验证日志ok后再将节点加入负载均衡。并让
节点服务能在负载均衡生效。
2.在升级第2个斗比节点的时候,如法炮制。
针对这种斗比模式,本人有如下观点:
1.这种模式是坑运维和坑老板
2.这种模式是用运维工具去弥补程序设计的严重缺陷
3.这种模式是给平台化、自动化一杯毒酒
4.这种模式是用高可用、灰度这种“正常”模式来装高逼格,用装高逼格的方法论来掩饰程序设计上的缺陷。
技术团队如何有效沟通?请看实例
技术团队如何有效沟通?请看实例
a:@运维b、@运维c,现在我们的qps峰值是多少?
b:请问什么项目的qps的峰值?什么对象的峰值?
a:你们有哪些对象?
b:(b开始不计成本的开始给a罗列项目)xxx项目、xx项目、xxxx项目……
a:那就看xx项目的吧(随机指定1个)
b:你要看xx项目的什么对象的峰值(a去找数据,不计成本帮a找)
a:有哪些对象?(很悠闲的姿态)
b:有xx的、有xxx的、有xxxx的等等等等(罗列对象)
a:那就看xxx的吧(随机指定1个)
b:xxx的qps峰值为xxx(开始翻数据)
a:好的,谢谢!
我们现在统计下a和b的成本
a的成本是
a:@运维b、@运维c,现在我们的qps峰值是多少?
a:你们有哪些对象?
a:那就看xx项目的吧(随机指定1个)
a:有哪些对象?(很悠闲的姿态)
a:那就看xxx的吧(随机指定1个)
a:好的,谢谢!
总共就5句话
b的成本为5个事件。包括列表、筛选、询问最后解答
b:请问什么项目的qps的峰值?什么对象的峰值?
b:(b开始不计成本的开始给a罗列项目)xxx项目、xx项目、xxxx项目……
b:你要看xx项目的什么对象的峰值(a去找数据,不计成本帮a找)
b:有xx的、有xxx的、有xxxx的等等等等(罗列对象)
b:xxx的qps峰值为xxx(开始翻数据)
如何提问?
a为什么不能第一次就讲,我需要xx项目的xx对象的qps峰值?
导致b会去不断询问a,到底需要什么?
河南嫌犯关押10年后因证据不足取保候审–中国特色的法治社会
13年前(地点)一起强奸杀人碎尸案,如今看来已很遥远。但是,这一直是犯罪嫌疑人杨波涛生命中不能承受之重。
杨波涛从被列为犯罪嫌疑人至今已经10年,他在看守所也被关了10年,却一直未能被定罪。其间,他经历了商丘市中院3次判决极刑,河南省高院3次裁定撤销原判、发回重审。最终,商丘市检察院以事实不清、证据不足为由撤销了对他的起诉。
2月11日,商丘市公安局给他送来了《取保候审决定书》,在看守所里度过了10年青春的杨波涛第一次走了出来,等侯在外的父母露出了久违的笑容。记者对杨波涛及其家人进行了深入采访,了解案件背后的故事。
nfs服务器以及防火墙设置
WordPress 防范大规模暴力破解攻击
WordPress 防范大规模暴力破解攻击
攻击者主要是首先扫描 WordPress 网站,然后通过穷举法攻击 WordPress 的默认用户名:admin,
我们可以通过以下三个步骤来减少被攻击以及被攻陷的机会:
1、在当前 functions.php 添加以下代码去掉 WordPress 版本信息,减少被扫描到的机会。
remove_action( ‘wp_head’, ‘wp_generator’);
2、默认的用户名不要为 admin,通过一下 SQL 修改 admin 的用户名:
UPDATE wp_users SET user_login = ‘newuser’ WHERE user_login = ‘admin’;
3、安装 Limit Login Attempts 插件,限制登陆尝试次数,防止通过穷举法获取后台密码。
VirtualBox 4.2.12 发布,修复大量 bug
Oracle 刚刚发布了 VirtualBox 4.2.12, 这是一个维护更新版本,修复了大量的 bug ,更新包括动态支持通过 Windows Additions 设置多监视器。
该版本还修复了很多 GUI 方面的问题,旨在提升多屏幕的支持上,包括修改可视化模式可能会导致崩溃的问题;以及在 OS X 上的菜单条问题。
虚拟机管理器的界面也做了改进,包括垂直滚动条自动根据窗口大小的变化而更新;修复了机器状态更高后事件崩溃的问题等等。