微信号:heiyeluren-tech

介绍:LAMP相关的互联网技术的交流咨询分享

在工作中如何推进新技术,如何让别的同事配合?

2016-09-19 14:23 黑夜路人技术群

【今日话题】


在工作中如何推进新技术,如何让别的同事配合?


1、我是领导, 我要推进, 敢不配合  - 我不叫大脸猫


2、我提一个 : 从自己现有业务工作引入新技术,确认自己能从新技术中获益后,收集数据,再从内部作分享及推广 - Simba 


3、公司允许的情况。 1 兴趣引导 2 剩下的人直接压作业   -@理鱼


4、我也觉得要先说服领导,让同事配合没用,领导觉得好就会用 - 荒野猎人


5、团队能hold住。就上,Hold不住。。说啥都没用 - 明


6、一般讨论这个的,都是领导吧,然而领导要考虑风险和收益对不对等,不然投入3个人,搞半年,啥都没有,他给大boss也交不了差,还得是领导必须彻底了解,评估下自己能不能Hold住,自下而上的话,你就得给leader一种极强的信心 - 胜邪


7、把环境都搭好,给领导演示一下,让领导写个DEMO体验一下 - 荒野猎人


8、自下而上,如果不是非常明显的解决痛点比较难,自上而下就比较容易推 - 每天都不知道吃什么


9、上新的必须是成熟的,或者简单的,不然免谈 - 种树人


10、新技术要解决痛点啊 然后在个人项目上应用成功 再拿出来推广 - 仲晨


11、推动新技术会有两个问题, 一是是否解决痛点, 二是会导致资源重新分配权力重新分配 - 我不叫大脸猫


12、过去半年,我们组就经历一次引入新的编程语言的经历。


背景:我们有一个命令管理系统(就是 Salt 的封装),之前在业务层是前人用 PHP 写的,然后到现在代码质量和性能都有点问题,每次同时推1w台服务器做任务就开始有几台~几十台的失败,所以需要重构。


主管的意思是想继续用 PHP 重构,但是另一个同事想要使用 Golang,但是问题是我们组目前没有项目是使用 Golang,其他同事对 Golang 也不熟悉,所以主管不太同意。


所以我和那位同事这样做,后来顺利让 Golang 在我们组生根发芽。


1,我和那位同事结对编程,使用 Golang 重构了系统,QPS 从 20 升到了 2000+,并且支持超过 1w 的机器同时做任务。


2,开展了 Golang 从入门到原理的技术分享,总共分享了 5 次 Golang 的技术分享,从普通使用、Golang 的比较经典的包、Goroutine 原理和源码分享、单元测试、例子分享(使用的是 Golang 实现一致性 Hash),把其他几个同事也带入门。


3,后来,我们部门的监控系统的业务层的定时任务,原来也是 PHP,但在周期性生成监控策略和统计数据上出现瓶颈。这时另外一个同事也使用 Golang 重构了那部分没有强业务耦合的代码,性能提升得很明显。同时,也把实时流量部分,使用 Golang 的 websocket 写出来,效果也很好。


这样一来,我们组就有多个可替代的 Golang 开发人员,而且效果也不错,所以现在如果项目比较独立,都允许使用 Golang 开发。

其实,对于 Leader 最担心的问题应该只有两个:1. 你们走了,有没有人能接手,还好不好招到能接手的人?2. 你们能不能 hold 住这东西?

所以,当时我们做的事情,就主要在解决 Leader 的这两个顾虑。

- Hiko Qiu


13、 感谢分享你的经验,值得学习,这个确实是大家引入新技术最大的担忧 - Asta Xie


14、不过我们有点不同,因为我们是电商公司,推 go 需要跨过 java 这座大山 ,go 干掉 php 比较容易,但干掉 java 需要千辛万苦,万幸有 docker 在前面,我们做虚拟化平台,不得不用 go,才能慢慢推广开来 - yangmls


15、干掉JAVA容易吧,支付SDK 是JAVA的,其他还有什么必须用JAVA - 荒野猎人


16、dubbo hadoop。。。整套交易链路都是 java,我们因为负责基础设施才能不用 java  - yangmls


17、Golang 用着就像万金油一样,哪里不爽点哪里。基本上,需要什么模块,引个包进来就Ok了,而且还能直接追到各个包的源码,而且都是 Golang,阅读起来不费力。 - Hiko Qiu


18、现在golang已经好很多了,1.3刚到1.4时候用golang问题还是很多的,包括用的kafka库也有一些问题 - 朝沐金风


19、我也觉得golang很好,遗憾一直在工作上用不着 - Song 


20、@Hiko Qiu 分享的很好啊,我曾经是golang推手,这几年国内发展的不错,在国外也算引领国际潮流 - 黑夜路人


21、这才过几年,你们就把erlang抛到脑后了,真是只见新人笑,不见旧人哭  - 胜邪


22、erlang什么时候流行过啊 ? - Asta Xie


23、前两年啊,不对,应该是前,4,5年吧 - 胜邪


24、范围还是很窄的  - @理鱼


25、不算打脸, erlang使用范围太窄了, go可以开发docker, c也可以, 但是erlang呢, 估计能把你折腾死也写不了  - 我不叫大脸猫


26、erlang命运类似于ruby,依赖于rails框架才火,erlang有个啥OTP  - 黑夜路人


27、php做不了go做的事, 你不推go推谁,就好比你们以前都推PHP, 现在还不是推go ,而且erlang也一直没有在某个领域内能做到霸主地位的杀手级应用 ,想来想去大家都知道的也就是rmq了- 我不叫大脸猫


28、go有个地方不是很爽的,就是文件io是同步的,如果磁盘io繁忙,估计go就卡死了 - Song


29、erlang的io更不行 - 我不叫大脸猫


30、磁盘如果繁忙 啥也不行吧,我也不懂,我是猜的 - 荒野猎人


31、erlang在im方面就不错 - Chelin Tsien


32、@Hiko Qiu 你们的运维系统开源不?我也正在用go开发这个  - 李鑫


33、@李鑫 开源不了,业务耦合度太高了。其实我们部门的整套系统,都是用开源软件搭起来。

命令系统用: Salt

监控系统用: Open-falcon

Salt 指的是 SaltStack,配置同步有 Rsync 和 Zookeeper,还有其他的工具:Zabbix、ansible

- Hiko Qiu


34、多谢,估计也开源不了。。。命令我们也是用salt,监控、报警这块还是自己做 - 李鑫


35、我们部门其他组有个同事用 Golang 写了一个 Salt 的替代品,上次刚和他 Code Review 完。目前,他跟我组的另一个同事正在逐步替换 Salt,目前只替换了一个集群,观察情况。之后会考虑开源出去。

监控报警这方面,我们是深度定制了 Open-falcon,目前监控接近2w台服务器。       - Hiko Qiu


36、@Hiko Qiu 你是平安科技吗? - Asta Xie



37、不是,360的。在部门久闻璐姐大名~~~ - Hiko Qiu


38、平安科技也是深度定制open-falcon  - Asta Xie


39、说erlang不行的那个站出来,是真了解erlang还说仅仅用过rmq甚至连rmq源码都没看过 ,而且erlang也一直没有在某个领域内能做到霸主地位的杀手级应用,opt,主要是难学吧,学习成本太高了,仍然是电信行业老大,go撼动不了的 - viktor


40、我们刚才没有说erlang不行,是说不流行,erlang不流行的理由太多了 - Asta Xie


41、我理解erlang就是复杂度,学习成本高,对,产生这种模型,写起来特别恶心,我觉得争论这个没意义,难着不会,会者不难… 看场景   - 金灶沐


42、@viktor 让我们过两三年之后再聊,从华为内部了解的情况,Go已经在大规模应用,看看是不是会把电信里面的一些系统干掉    - Asta Xie


43、主要还是内存模型,go的模型大赞 - 金灶沐


44、华为在大规模用了啊 太好了 不愁失业了 我家就在华为边上 - 李鑫


45、谢大我的意思是,楼上有人仅仅用了一个erlang写的队列就如此评价erlang  - viktor


46、恩,erlang还是和牛逼的,淘宝霸爷就用erlang写了他们阿里云数据库的系统,我记得厦门那边很多游戏公司也是用erlang的  - Asta Xie


47、对啊,最早就是游戏公司火,没人说erlang不行,不要激动,就是说下流行热度而已 - 胜邪


48、rabbitmq couchbase riak xmpp 的broker ejabberd 不都是erlang吗?otp是把常用的模式用框架固定下来 看懂了erlang只要是otp规范的代码 很容易看的 - linbo


49、郭老师霸气,有次去听郭老师分享go。我一看,心想:这个三十几岁的大叔讲的不错。后来,我的世界观颠覆了。 - Hiko Qiu 


50、我们用 Go 写了整套监控系统,不是基于 open falcon,合适的时候可能会开源 - yangmls


51、不过最近我即将成立一个Go基金会,其中一点就是针对企业的一些痛点,打算好好扶植国内的开源项目,监控系统,游戏引擎,消息推送系统,数据库sharding  - Asta Xie



52、公司前端推vue,组织全公司感兴趣的开发人员一起学习。虽说我学了,不是做前端的,忘得差不多了 - 路超


53、我说说推进Go语言替换PHP作为后端离线运算的感受吧。 推进新技术,个人感觉是,1 确实用新技术更好,也有需要应用的场景。2 能搞定领导。 让领导感觉好这个技术好,好上手,人手也不愁。  至于 下面的人,我的方法是:1 也让他们感受到新技术的好。能解决哪些工作中的痛点问题。2 从小需求,临时需求开始用这个新技术处理。让大家有个过度熟悉语言。 3 强制分享。 每周例会的时候,安排分享内容。 必须分享新技术相关的。  4 重构原有程序 - windk


54、2 都是玩技术的,一切就是以事实说话,大点的新技术优化改造先跟技术负责人或者架构确定好。先推行试点,验证没问题,并证明有效率提升,功能提升。然后再推广。。不然自己推很难。而且很容易有反弹。小的编程方法和编程技巧优化 也是要自己用的顺手,找几个人试试。然后再推广。而且使用后一定做分享或者结果总结会,其实也就是成效推广会 - 紫川


55、用go做离线运算,看起来还蛮合适的 - 王晶@swoole桶哥


56、我们的一个方向是:去掉数据库。 之前是PHP 多进程+MySQL分表。 现在是 直接把数据放内存。 运算速度有非常大的提升。- windk


57、数据放内存,这些数据是最终数据还是中间数据  - 九命猫




【其他问答】


1、关于“自旋锁” 的讨论


自旋锁应用很广泛,从php、nginx、到linux内核  - 黑夜路人


yeah,nginx也是这样,nginx用汇编写的,我改成gcc的函数而已 - song


相对来说是比较简单的高性能的一个锁机制 - 黑夜路人


自旋锁解决并发是怎么说呢? - 胜邪


自旋锁有性能瓶颈  - 金灶沐


自旋锁貌似有点像。。。自慰。。 - 黑夜路人


一直耗着,直到获取到啊。 - 金灶沐


没事儿就自我旋转。。。然后看看完了没,要不要释放锁,发现不要,可能睡眠一会,然后再检查。。。 - 黑夜路人


自旋锁看场景使用啊 - Song


我记得java里有个机制避免了这个  - 金灶沐


实现原理到是知道,就是循环呗 - 胜邪


稍微耗点cpu  - 黑夜路人


自旋锁缺点就是占用cpu时间片 - viktor


我的意思是为啥能解决并发呢,这个不太理解 - 胜邪


互斥,亮哥说的睡眠也是等待的方案,缺点是任务结束会有延时,优点是对cpu友好些 - viktor


给你们看个我们用PHP+redis弄的锁 应该算自旋锁吧  - 胜邪


只是加一操作,用自旋锁会比互斥锁快很多 ,看锁的粒度 - Song


类似于空间换时间的概念,用资源把时序化打散 - xingxing


只要是睡眠,你就不知道让他睡多久?刚睡着,任务就结束了,那要等醒来才释放 - viktor


linux内核有太多用自旋锁了  - Song


就是没有排队机制,一但并发多了,超时经常发生  - 胜邪


我印象里 pthread_mutex 应该也是自旋锁吧。。。  - 黑夜路人


是  - viktor



你这个代码可以参考下memcache mutex模式 ,为了防止缓存穿透做的 - viktor


php+redis 有个 redlock库 - 荒野猎人



2、php byte to java  有没有啥方法处理 - 邵奇


base64? - 黄隆


php 的socket 只能发送字符串类型的数据,而java 端值接收byte 数据类型的。暂时不知道怎么破 - 邵奇


php socket 用pack也能发送byte吧 - 何勇


php byte->base64 编码 -> java流 -> java base64解码 -> byte - 黄隆


java有字符流和字节流的区别,php用的基本是字符流,对方用的是字节流,比如加密,网络传输等,写php一般容易懵逼 - tlanyan


都是编码的呀,例如hex编码,basexx的,没那么复杂 - 黄隆


的确是编码,不太清楚 服务端具体如何处理的,比较懵逼 - 邵奇


如果php字符到java,不需要做任何处理呀,主要是java的byte到php要先编码一下,服务器还要啥具体的呢,别想那么复杂 - 黄隆


服务端目前只接收byte 流  - 邵奇


php服务端?  - 黄隆


byte是不可见的,可见的都是转化后的 ,输出的话,都是base64  - tiyee


pack函数,输出字节流 - Paris


php客户端是走http协议? - 黄隆


php 客户端走 udp  - 邵奇


建议还是走http吧,msgpack坑略多,性能优势并不突出  - tiyee


字节字符随意切换啊。。。 - Nemo


那就不用管呀 ,直接用就行了    - 黄隆


大头,小头,8,16,32,64都可以 - Paris


主要是:字节大小,字节序  - 陈亦


网络序都是大头   - Nemo


没有大端小端的问题吧 - 黄隆


怎么会没有呢~  - Nemo


那可难说。看双方约定吧。未必一定是big endian  - 陈亦


你发送一串二进制,对方收到一串二进制,你俩得互相约定好,这串二进制怎么编码,怎么解码 - Nemo


身在小厂,厂主 决定要把日志统一管理,于是乎,java 服务端已经做出来了,各个客户端要做适配。 - 邵奇


那不是很简单么?恰巧我正在写。。。php的clien,golang的server,用的二进制协议  - 陈亦


直接字符串不行吗?http传字符串  - tiyee


http 就简单了 ,php 需要实现 udp 封包  - 邵奇


msgpack还好啊,不过有时和其他语言配合会出点问题...  - 骑马爬树


很简单的需求,只不过大部分人没做过 - Paris


前车之鉴,能用http的就别整啥rpc,要明白,简单耐操才是最好的,逼格不逼格是次要的  - tiyee


php 字符串转换成 bytes 数组比较容易,php socket 只能发字符串,琢磨者怎么发送出去 - 邵奇 

 

为啥用udp呢?啊,多么痛的领悟呀 - 黄隆


我们go和php通讯的rpc是tcp传的msgpack,老后悔了  - tiyee


rpc和php差不多了,性能上 ,http确实方便  - 黄隆


用的是yar,非常坑  - tiyee


msgpack  不是号称最少压缩大小的吗    - xH 


用udp可能要自己打包的,比tcp还复杂   - 黄隆


就是要这么玩的   - 邵奇


内网环境,差别不是很大,维护成本却很高  - tiyee

 

java 端定义好了 封包规则,客户端就要按照这个来   - 邵奇


你们知道字符串是啥么....    - Nemo 


字符串不就是字符流(字节流),也即字节序列么  - 陈亦


字节序列不是说的大端小端? - 一零二四


对于字符串来说,没有这个说法,只有多字节才有  - 陈亦


囧,感觉你们把定义说得好乱  - 廖强


php中的字符串类型 java的byte 类型 懵了  - 邵奇


这个解释比较复杂了,字符、宽字符、字节的三者区别,从占用大小上,传统所谓的char和byte都占一个字节,宽字符占的字节根据不同实现方式,占用上会有不同,不同语言,对字符串的定义其实比较大。比如c语言里面,字符串以\0作为结尾,但是字节序列就没这个限制;在python里面,str类型又有和unicode的区分,ascii是字符编码的一个格式      - 廖强

ascii 才是一个字节,可以这样理解,计算机是没有字符的,字符只是字节展现形式,也就是字典映射   - tiyee


嗯,这么说也对,我老想从底层去解释,发现你这么说挺好  - 廖强


没办法,比不上你们这些学院派,计算机只有高低电平,也就是0和1,然后有个映射表,把不同的0和1的排列转换成我们看到的字符,我一直是这样理解的,一般是8bit 


所以,你们说,php发不了啥啥的。。 我就看不下去了~  - Nemo

 

大小端对通讯没影响,对编解码有影响   - 黄隆



3、数据库最近几天总是莫名其妙的挂了,一般什么原因导致的?


内存爆了? - 郭煜彬


oom概率还是有的,可以看一下系统的日志  - 王晶@swoole桶哥


oom 一般有log 的  - 随风而过



4、群里有没有刚毕业的?你们最想听哪方面的知识 - tiyee


第一出故障的时候如何甩锅。第二出故障锅又甩不出去的时候如何装孙子。第三丢锅甩不出去的时候如何尽快找到新工作。 - 随风而过


画大饼,  - Imp


如何提高技术能力  - Mr.wang


程序员从入门到放弃。 - 熊mao


一个成长的路线。一条学习的路线。  - 香克斯


项目介绍,公司里使用的工具的介绍,各种名词和缩写介绍,具体负责的部分。刚进公司是蒙逼的,减少点蒙逼感 - 干扰χ


新人的话讲点代码规范, 怎么找问题什么的 还是可以的。 再具体些,可以大概讲下项目的东西。 - Imp 


怎么debug,新人要学会自己找到问题并解决问题,这样后面带着省心 ,找不到问题能纠结好几天 - miki


Run as Debug->断点->单步调试->完 ,讲 你们用到的框架啥的 让快速熟悉 ,还有工作内容 - 苹果


以及版本控制  - 邵奇


不止一个人听啊,也不是搞一门语言的  - tiyee


貌似都是很基础的 ,版本控制、团队协作、分工、流程、业务体系 等等这些  - 蜗牛ᵀᴹ


,解决新人能顺利的开展工作,这话题咋样  - miki


要求定期讲点技术方面的,让其有成长 - tiyee


定期的 就讲你遇到的呗 ,感觉技术 一般都得限定语言和环境   - 苹果


怎样做项目 做项目的思路,拿到一个需求 怎么开展 怎么开发 - 是非


【每日一笑】





【分享链接】


[ 干货|Pinterest 数据切分:解惑快速扩展 MySQL 的数据量 ] http://mp.weixin.qq.com/s?__biz=MzA4NjA4MTkzMw==&mid=2651988053&idx=2&sn=654b986d16b869d6f7ec63cfeecc6f3b&chksm=8428a8b7b35f21a1084fe3d2a55725f2ac8023b2b1e5e1ddae4bc056b03ca98fc2915e91eaa1&scene=1&srcid=0913NiSF7ct1UyV92CFuFpcB#wechat_redirect


[ "SOLID" Go语言设计 ] http://mp.weixin.qq.com/s?__biz=MjM5OTcxMzE0MQ==&mid=2653369758&idx=1&sn=8b6eee3c4c0eb967fbd8dc8046cf6b6d&scene=1&srcid=0913vL1UioyJESY6AadTkHNN#wechat_redirect


宜信开源的这个还不错啊,思路很像,https://github.com/laincloud 


[ PHP模仿java的DataInputStream和DataOutputStream ] https://www.oschina.net/code/snippet_2260205_55242


[ php和c++socket通讯(基于字节流,二进制) ] http://blog.csdn.net/zouhao619/article/details/9009049


[ PHP使用Socket发送字节流 ] http://www.cnblogs.com/yimu/archive/2013/01/04/2843758.html


[ 中科院计算所开源人脸识别引擎SeetaFace ] http://36kr.com/newsflash/coop/24756.html?


【其他】

如对上述讨论有异议或更好的意见,请提出或在群里继续讨论


进群方式:公众号后台回复微信号,管理员会拉你入群 



 
黑夜路人技术 更多文章 如何踏踏实实学点东西,提升内功 [20160829]说说服务器被攻击,怎么定位,怎么解决,怎么防御? 【2016年8月24日】是否可以用go来完成用c或者c++写的一些底层服务,会更简单吗? 【20160818】分析各种搜索的优劣势(es、solr、sphinx、mysql like) [20160805]测试工程师的主要任务是什么?主要看重哪方面能提升自己?
猜您喜欢 【重磅干货】Matlab 高频算法交易——从基础到高级算法的完美实现(源码附送,这货太干了!) 每个极客都应该知道的Linux技巧 mysql的实时备份或者 热备份 7条建议从码农成长为CTO 最让程序员感到崩溃的10种编程语言