暂无个人介绍
这世界上很多事情,看起来就像彩虹一样炫目而神奇,实际上背后蕴含着随处可见的原理。就好像静儿几年前买过一件超贵的防辐射服,当时销售人员把手机严严实实的包在防辐射服里,然后让我打电话测试,果然没有信号。 直到今天,静儿为了写文章,把自己蒙在空调被里,额,竟然连不上网。于是掀起一个被角,“大象”的巡检结果哒哒哒的弹出来了。然后我感慨:自己当年何苦买那么贵一个“围裙”。 日志作为逻辑跟踪、线上问题排查、监控报警的有效基础利器被开发人员所熟知。问题发现、定位到解决,都离不开它,真是如彩虹般绚烂。而从它的演进过程也能看到现代互联网发展的一个缩影。
周五给大家做了个盖洛普Q12的分享。
经过一段时间的学习与实践,飞鸟已经可以独力解决一些问题。小鱼就让飞鸟讲述一些遇到的问题和解决过程。
Linux目录结构
一个目标:容器操作;两地三中心;四层服务发现;五种Pod共享资源;六个CNI常用插件;七层负载均衡;八种隔离维度;九个网络模型原则;十类IP地址;百级产品线;千级物理机;万级容器;相如无亿,K8s有亿:亿级日服务人次。
TDD是测试驱动开发(Test-Driven Development)的英文简称,是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。TDD虽是敏捷方法的核心实践,但不只使用于XP(Extreme Programming),同样可以适用于其他开发方法和过程。
静儿历时8个月终于如愿回归写代码的生活。希望这8个月的成长能对自己的码砖起到一定的指导意义。下面就介绍一下静儿回归后的第一次码砖经历
背景 每个系统都有它最核心的指标。比如在收单领域:进件系统第一重要的是保证入件准确,第二重要的是保证上单效率。清结算系统第一重要的是保证准确打款,第二重要的是保证及时打款。我们负责的系统是美团点评智能支付的核心链路,承担着智能支付100%的流量,内部习惯称为核心交易。因为涉及美团点评所有线下交易商家、用户之间的资金流转,对于核心交易来说:第一重要的是稳定性,第二重要的还是稳定性。
背景 每个系统都有它最核心的指标。比如在收单领域:进件系统第一重要的是保证入件准确,第二重要的是保证上单效率。清结算系统第一重要的是保证准确打款,第二重要的是保证及时打款。我们负责的系统是美团点评智能支付的核心链路,承担着智能支付100%的流量,内部习惯称为核心交易。因为涉及美团点评所有线下交易商家、用户之间的资金流转,对于核心交易来说:第一重要的是稳定性,第二重要的还是稳定性。
什么是重构? 重构是在不改变软件可观察行为的前提下改善其内部结构。---Martin Fowler 通俗说法:看起来没做啥调整,让系统继续更好的满足客户需求。同时,希望重构完成后,这个系统能够多蹦跶几年。
我们内部每周都有读书会,最近在读《clean code》,基本上是20分钟左右。总体原则是大家轮流来讲。 我自己也领了其中一章,第八章。这一张特别不巧,书少了3页。整个一章少了一半的内容。于是我自己发挥了一下,希望大家能有所收获。 从接口到类、工程、系统、框架。在做设计的时候关于边界的基本思路是一致的。就是需要在普适性和集中性中做一个权衡。权衡的结果直接就影响着边界。 边界的目的是要保证:易于理解,难以被误用。 边界划分的典型例子:spring spring框架是一个分层架构,由7个定义良好的模块组成。每个模块都可以单独存在,或者与其他一个或多个模块联合实现。
先介绍一下《MySQL数据库开发的三十六条军规》,这里只介绍核心的,具体内容大家可以自行百度,这是从底层开发人员到管理者必须知道规范。出自58赶集。 写在前面的话: 总是在灾难发生后,才想起容灾的主要性; 总是在吃过亏后,才记得有人提醒过。
因为最近项目正在做重构,而这次重构实质上比原来更接近于SOA化和微服务的思想。对于我们金融交易来说,数据结果的准确性是重中之重。所以今天总结一下分布式事务的实现方法,下次组内周会给大家统一一下概念。
静儿来面试新美大这个部门的时候,HR跟我说我们是最核心的部门,没有之一。我以为这是句夸张的招人用的玩笑。结果来了发现,额,这句话是很公正客观的。现在上上下下组成了一支牛人团队,请来了其他部门很多资深高手进行封闭开发,确保我们系统的稳定性。 选择一份工作,必然要考虑的是:我们是做基础设施的,还是做平台的,还是做核心链路的。业务方面讲究领域驱动,各个领域目标也不同。 基础设施最重要的指标是稳定性、性能、扩展性。平台讲究多业务,通用性,人效。所谓人效就是我这个平台有些自动化的东西不能满足需求,需要靠手工来完成,这样开发人员的人效就低。如果一个平台需要输入的东西很多,而且还需要多步骤审核
Beanstalk是一个高性能、轻量级的、分布式的、内存型的消息队列系统。最初设计的目的是想通过后台异步执行耗时的任务来降低高容量Web应用系统的页面访问延迟。其实Beanstalkd是典型的类Memcached设计,协议和使用方式都是同样的风格。其基本设计思想很简单:高性能离不开异步,异步离不开队列,而内部都是生产者-消费者模式的。
之前在乐视天天研究各种底层高大上的东西,因为我就一个人,想怎么弄怎么弄。如今来了新美大,好好研读一下《阿里巴巴Java开发手册v1.2》。还要对这么看似简单的东西解析一番。毕竟现在带团队,讲究团队合作。现在项目稍微有点乱,早统一,代价越低。别问我乐视是不是不行了。乐视好的很,已经到了谷底,该反弹了,看好乐视。我离开是因为自己的技术瓶颈,要是乐视像去年发展的那么好,我估计离开的更早。
消息队列是在乐视这边非常普遍使用的技术。在我们部门内部,不同的项目使用的消息队列实现也不一样。下面是支付系统的流转图
总结一下要形成的习惯: 1>有空时隔一段时间要做几道算法题,C语言和JAVA都可以,主要是训练思维。 2>定期阅读spring的源码。因为spring是框架,重设计,能够培养大局观。 3>阅读底层的书籍,如linux方面,虚拟机方面,这是内功。越高级的语言只是招式。 4>不要忘记做了一半的东西,如搜索引擎方面,redis方面,可以过一段时间再做,因为到时候自己的境界有提升,深入程度也会有所增加。 下面是今天的正题。我也很菜,看源码也很费力,所以都会从最容易的入手。先了解其原理,再去看源码。看源码看熟了,以后再遇到问题,就可以通过源码去了解原理了。
我们现在接口的线上问题主要有三个,第一:启动时有些机器会有短暂的线程池满。第二:并发量上不去,怕服务被打死,不敢调高限流阈值。第三:499超时现象。 今天终于把那天说的全量执行时间延长,从图中可以看到,中午12点发版之后,内存使用率有明显下降,晚上是接口调用高峰,会有上浮,但是总体来看还是下降了。
大量数据插入哈希MAP,运行一个多小时插入到2w多条的时候再也插入不进去了。想单个删除也很慢,跟插入差不多的慢。但是删除一整个key却很快。这和C语言的原理有关。删除key其实是删除的对value的引用,内存空间不需要重置,只在需要的时候将其重写。写过一个C语言基础入门的程序
我现在主要在做两件事,一件事是媒资接口的并发量上不去,我已经跟领导说好了:给我时间,我会搞定的。我脑子里的方案有A,B,C,D,E。但是这个业务相当重要,实际上做的时候虽然觉得这个架构太老太不合理,也只能先从JVM调优,dubbo参数调优,缓存参数调优这些做起,看看不改动架构的前提下能改善多少。然后再从一些局部的性能消耗点入手,从局部到整体一点点来。上周因为并发量上去之后,CPU使用率过高,jstat看到minor gc相当频繁,并发量上去之后竟然达到每秒4,5次。就先增加了新生代的容量,效果有,但是很小。
先聊聊业务。我们媒资这边目前的核心数据是乐视视频的乐视meta和专门存储电视剧,综艺节目,体育赛事这种长视频的作品库。乐视视频的数据都是多方审核的,需要很多运营。但是作品库部分却是弱运营的,运营都不超过10个人。结果做了两个app,日活都有四五百万的样子。我们其实都有各样的技术储备,很容易可以抓取人家数据,自己套上一个壳子在线解码。但是我们逼格很高,都不这么做的。乐视是个非常注重版权的公司。我名下都有近百个专利了。 撇开这个项目,先看这边一般web项目的常用JVM配置。
客户层ope-web采用的是标准的spring mvc架构。定义了三个视图解析器
本文有两条主线:一条是学习方法,怎样学过就能记住。另一条是实际项目中的IO处理问题,包括BIO,NIO,AIO,netty。旨在用学习具体知识的具体流程体现学习方法的形成过程。
第一次听到中间件这个名词是在人人的时候,那时候的中间件是基于ICE的,用C++写的。推荐几度人脉,新鲜事(feed流),antispam这些当时觉得最有技术含量的工作都包含在中间件里。但是这些东西都已经很成熟了,因为是C++写的,需要专人维护,但是维护的人平时又很闲,非常鸡肋。所以在C++的哥哥都离职之后,就用java改写了。改写之后用的是hessian协议了,就开始说RPC了,不讲ICE了。有些东西,错过了就是一辈子。
先介绍学心理学的时候记住的两个把妹秘籍: 1>巴甫洛夫把妹法:巴甫洛夫的狗的反射试验上学的时候大家都应该学过,天天给狗喂食的时候摇铃,后来不喂食只摇铃狗还是分泌唾液。应用到把妹这个非常有实际意义的事情上面就是:每天给妹子送早晨,等人家形成了习惯,突然不送了,人家就开始觉得不自在了,开始各种想这个男孩纸~~ 2>吊桥效应:在吊桥上,由于危险的情境,人们会不自觉地心跳加快,错把由这种情境引起的心跳加快理解为对方使自己心动,才产生的生理反应,故而对对方滋生出爱情的情愫。 心理学是门很实用的学问吧[偷笑][偷笑]。
在想自己和刚毕业的时候处理问题有什么不同。刚毕业的时候如果想卸载停用什么东西提示说正在使用,我就去找个强力卸载软件。如果我想清理浏览器缓存,会直接用工具,如果想找到缓存路径选择性的清理,会百度一下这个浏览器的默认缓存路径在哪里。现在,我会打开资源监视器查看磁盘活动,对文件,找到使用文件的进程;对应用,找到它在读写的文件路径。
下面的一些基本概念不但有助于看源码,在使用像solr这样的搜索引擎框架的时候还可以知道自己的配置都做了些什么事情。我在定义这些概念的时候也都有自己的理解和思考。
今天发生的问题:消息队列报错,实时消息没有发送成功,重启后问题消失。
访问者模式把数据结构和作用于结构上的操作解耦合,使得操作集合可相对自由地演化。具体到这个类就是不管是什么类型的数据,我都把它添加到Document对象里。
马云说:大家还没搞清PC时代的时候,移动互联网来了,还没搞清移动互联网的时候,大数据时代来了。 然而,我看到的是:在PC时代搞PC的,移动互联网时代搞移动互联网的,大数据时代搞大数据的,都是同一伙儿人。 我就是一个做业务方向的,而回忆起真正做技术的时光,也就是大数据时代刚来临的时候做搜索了。 搜索用的是solr框架,solr就是包装了lucene实现了近实时索引。所以源头还是lucene。而且lucene是java写的全文检索库,源码是一定要研究一下的。
看来上一篇写的讲的时候是用不上了。但是《极限编程》里提到的四个价值:沟通,简单,反馈和勇气。如果我不先写出一个样子来,客户自己可能也没有什么清晰的概念。我们必须敢于丢弃代码。编码和写作,在修改中走向成熟。 J2SE,J2ME,J2EE的2本来是指Java1.2以后的版本,因为这个版本有个质的飞越,其中包括双亲委派模型。但是大家现在基本都不知道2之前的版本长成什么样子,所以现在这三个方向已经改名为Java SE, Java ME, Java EE了。这其实是三个标准,我说我实现了J2SE就意味着我可以用J2SE的组件进行java程序的开发了。JAVA这些平台是java可伸缩性的一个提现。
最近准备对其他部门PHP开发的童鞋做一个对JAVA的培训。知己知彼,百战不殆,我要先了解点PHP,才能确认他们的基础,达到好的授课效果。 PHP(原始为Personal Home Page的缩写,后正式更名为Hypertext Preprocessor超文本预处理器)是一种通用开源脚本语言。语法吸收了C语言,Java和Perl的特点,利于学习,适用于Web开发领域。
这其实是个小功能,但是我觉得非常有意思。因为这个业务不但总体数据量大,单个数据体也是超大个的。业务场景是这样的:我们需要把数据库的视频和专辑数据给搜索那边。搜索那边规定好了数据的格式和传输方式。全量数据用文件的方式放到hadoop节点上,增量数据用消息队列发送。
我在做项目的时候,将自己所有涉及到的项目编译和运行JAVA版本都升级到了1.7。告诉其他人说:我们要好好利用JVM升级带来的免费性能福利。有人跟我说:其实服务器上是1.7啊,只是jenkins部署的时候用的1.6而已。我叹了口气,这个问题,要我详细讲的话,我可以讲上两天,以下是精简的部分。