架构师之路--谈架构师的基本素养和[干货]日志处理

  因为前两篇文章的关系,最近收到不少朋友的反馈和私信,谈如何成长为一个架构师的问题。在这以前我不多有时间去考虑这个问题,由于我总有作不完的事儿:看不完的书,解决不完的问题,干不完的活儿……  不是我干活儿慢,实际状况偏偏相反。可是我老是能给本身找不少的事情。个人桌面上有好几个txt,里面记录着各个方面要作的事情,看书过程当中发现的问题等等。去年有一段时间很闲,我天天干着公司里的活儿,本身创着业,一天还要写一两篇专利,仍是感受很闲。其实就是想的少,作的不够细。而一我的能给本身找到多少要作的事情才是一我的真正的潜力。下面谈一谈对架构师基本素养的我的理解:php

素养一:知识面html

  知识面宽不必定是须要作的有多好,能够仅仅是爱好。医学,心理学,生物,画画,外语等等。看过我前面博文的朋友可能还会记得我文章里有本身随手的涂鸦,还有不着调的舞蹈和唱歌视频,歌词都是本身编的。架构师最新做品:<母子飙歌吓跑羊>[汗]。 博客页首的横幅是我本人的PS做品,里面那个女孩子是P的本身[擦汗]。网页三剑客我是用的很熟的。被你们吐槽的丑丑的博客页面也是本身的前端做品[再次擦汗]。知识面决定一名架构师的能力和灵感。一名成功的架构师对知识储备要广。特别是对本身专一领域的最新技术和成熟技术方案要了如指掌。须要对相关领域的最新技术保持敏感。前端

  发现不少名副其实的架构师都有我说的特质。<Thinking In java>里做者花了一页的篇幅说书友吐槽说此书篇幅太大,而做者很努力的在压缩篇幅了,仍是有1k多页。而后紧接着下面有近一页介绍了本身的封面设计[汗]。感谢部分却是每本书都有,可是这个做者连咖啡和猫都要感谢一下[汗]。java

素养二:靠谱python

  这半年来,常常有来这边挖人的。有以前的领导,以前帮过个人人,只要我说过有合适的我就推荐给他的人, 都真的收到了我给的推荐简历。虽然距离以前领导来挖人已通过去半年了。可是,只要我答应过的我都记得。因此值此乐视风口浪尖之际,我不多敢在圈子里说话,否则……,你懂的[汗]。 以前作私活儿,请朋友帮忙调过一个前端bug。这里我要由衷的感谢一下上帝,给了我一群靠谱的朋友。后来我拿到了项目款,先给朋友发了个百元大红包。朋友说感谢红包可是之后别再给了,又不是啥大事儿。可是我以为作人要厚道,决不能肥了本身亏了别人。ios

素养三:广交朋友程序员

  个人技术在朋友圈里是个小喽啰。几个月前给了两万块钱给一个朋友让他帮我炒股。签的半年合同,如今怎么样了我也没问。用人不疑,疑人不用。这个朋友我是怎么认识的呢?我以前就见过他一面,去58面试,他是面试官。我认识一个大牛是58的一个部门领导。以前是同事,我什么水平其实都清楚。因此面试的时候,面试官说我们随便唠唠,而后真的是基本啥都没问,就是唠嗑,主要是听他讲技术和他的经历。而后他让我先等一下,找了另外一个上级说我啥都会,而后回来继续唠嗑。而后我留了他的QQ,没事交流一下技术。多和技术牛人聊天可以拓展思惟,还能了解技术前沿。还有,这些技术牛人基本不会叫我姐[汗],听到谁叫我姐,我基本上就不想再说话了[擦汗]。我家小鲜肉深譪其道,有次下幼儿园对奶奶说:“奶奶,麻麻是女神。”  奶奶没明白,就说:“啥,女神?你妈还女总统,女皇帝呢!”[狂汗],什么叫18个代沟!面试

素养四:不断学习redis

  咱们大领导,大部门总架构师。咱们大领导手下的领导都已经不编码了。可是咱们领导本身手头还有一个本身开发维护的项目。有次有个同事有问题和那个项目有关,要找那个项目的开发。据说是咱们大领导大吃一惊,另外一我的回答说:“大领导对编码有特殊的情节。” 大领导精通php,python,perl,熟悉C。前段时间来找我让我给几个php同事讲java。我觉得大领导只是个组织者。后来才发现,大领导本身有很强烈的学java的愿望,不服不行。spring

素养五:坚持

  来乐视以后遇到不少以前人人网的同事,跟他们打招呼,很久他们才反应过来。由于在人人网的时候,我家宝宝还小,为了宝宝的养分,我把本身喂到170多斤。一顿饭,吃几个菜,饭后再来一只烤鸭。好几年都很胖,坐地铁不用排队,公共交通都有好心人给让座[捂脸][崩溃]。楼下大妈看到我家娃都那么大了,我还那么胖,就喳喳嘴说:回不来喽。因此我能够理解原同事们认不出如今90多斤的我。两年多基本没吃过晚饭。记得那时候有次下班车回家,路上是各类小吃,闻到那香味都想哭,仍是坚持下来了。在我减肥成功后,身边的女孩子都变得很瘦了。就像以前在东软,我用一年过了日语一级以后,和我走的近的女孩子们都在以后很短的时间过了二级。坚持是很容易感染人的。

  坚持对工做的做用,一件小事能够体现:我每一个工做日晚上9点多回家。无论是周五,仍是放假前最后一天,每天这个点。刚开始的时候,小鲜肉不习惯,我就跟她说妈妈回来的晚,可是天天会给你带一个玩具,次日早晨你起床就看到了。第一个星期天天他都有玩具很开心,我11点多到家,他睡得很香。到第二个星期,我跟他说:妈妈刚在网上买的,明天能到。因而第二个星期,隔一天他获得一个玩具,我11点多到家,他睡得很香。过了几个星期,放三天假,他发现了我藏起来的不少新买的玩具。我说那你如今都拆了这些玩具,下星期就不能管我要玩具了。结果,他真的没要,并且之后都忘记了玩具这回事儿。而我天天固定的点下班,工做日每天如此。

素养六:专业

  我们经常使用的中文分词器有:IK分词器,中科院分词器,庖丁分词器。我以为这个庖丁分词器名字起得特别好,庖丁分词器全名叫“庖丁解牛”,形象的说明了此分词器的做用。而庖丁是个名词,一看做者就是很懂面向对象的。统一建模语言画图的时候,类用一个方框表示,体现的是其封装性,类型在最上面,中间是数据成员,下面是方法,很好的展示了类的结构和本质。以前有个同事,他学物理出身。当时也是刚转程序员哈,写代码的类名和方法名都起得很长。类是一个对象,这个对象的分类,显然是一个事物,怎么可能有那么长的名字。方法名里面包含了那么多and,很明显的违背了面向对象的单一职责原则。他写的类基本不用接口,显然是还不知道隐藏实现是干什么用的,也更没想到里氏替换了。活儿,好像是人人都能干,素养,细节处仍是可能看出来的。

  

下面是一如既往的干货时间,今天来聊聊日志处理。

  JAVA的日志你们基本都在用slf4j。SLF4j(Simple Logging Facade for Java)是一个通用的日志框架。里面只定义了接口,是门面模式的典型表明。提起门面模式又想起来一个典型表明:spring mvc里的上下文,无论用的具体实现是哪个,都走统一的接口:ApplicationContext。实现门面模式的技术叫动态绑定,是Java多态的一个体现。

  slf4j刚开始使用的时候遇到了不少问题,由于你们都在使用本身的日志系统和通用接口。好比:common-logging(jakarta common logging 简称jcl)是apache提供的一个通用的日志接口。用户能够自由选择第三方日志组件做为具体实现。具体实现比较经常使用的有java.util.logging,log4j,logback。因为logback在性能上的改进。因此实现上你们广泛选用logback。可是像java基本类库和apache一些类库里原本已经使用了其余的,这时候就须要用到桥接模式。slf4j用于桥接的jar包邮log4j-over-slf4j.jar(桥接log4j),jcl-over-slf4j.jar(桥接common-logging),jul-to-slf4j.jar(桥接java.util.logging)。工做原理就是包含了大部分使用的类的代替类,从新把全部的工做指向相关的slf4j类。其实每一种桥接都对应了一种驱动,将slf4j强制交给某个实现来执行的,对应一种实现的桥接和驱动不能同时存在,不然,想一想都知道,根本启动不了。logback的驱动类是logback-classic.jar。下面借用以前给组内人员作技术分享时的一页PPT:

 

  通常作业务,开发的时候sql错误是你们很关心的。使用经典的springmvc+servlet容器+ibatis架构,SQL的输出须要额外的包装。好比号称是最好用的数据库链接池的druid或者直接将数据库驱动改用log4jdbc。用法自行百度,本姑娘只讲原理。

  SLF4j的优点在于上面介绍的与客户端解耦和采用占位符减小字符串拼接节省内存。原理就是slf4j中提供了ILogger和ILoggerFactory接口。其实现Logger类用来打印日志,LoggerFactory类用来获取Logger。而类实例是经过StaticLoggerBinder类来定义。这个类是实现slf4j的驱动自行定义的统一入口。SLF4j没有实现StaticLoggerBinder,只是负责使用类加载机制加载它。

  虽然主流的日志实现都是采用这种方式实现的。可是slf4j还提供了SPI的接口支持。由于没有主流对应的实现,介绍SPI仍是用我所擅长的搜索引擎来说。先介绍概念:

  SPI(Service Provider Interface):这是jdk1.5的一个内置标准,容许不一样的开发者去实现某个特定的服务,是一种服务提供发现机制。实现时须要声明一个service provider,它在jar包的META-INF目录下建立一个service子目录,而且为每个service provider提供一个以service全名命名的文件。下面是lucene源码中的截图。你们要是对SPI感兴趣,能够研究一下java.util.ServiceLoader的源码。类加载机制的缘由,service provider的声明和实现类必需要在一个jar包里,来保证安全。lucene的本身的测试框架中必需要声明其编解码器,就是用的SPI。

  咱们如今用的Dubbo框架也是基于SPI机制提供扩展功能。能够支持不一样的传输协议。

 

   下面来谈谈咱们业务中对日志处理的运用。每一个项目都有本身的业务日志。那么咱们部门总架构师,我家微微一笑很倾城的男神老大想要查看本身下面的子业务的健康情况怎么办呢?

  通常来讲每一个公司都会基本的监控,最经常使用的三大开源运维监控工具zabbix,nagios和open-falcon。在以前的公司,运维用的是nagios。来乐视以后,刚开始用的是zabbix,后来换成了falcon。换成falcon的缘由,运维组男神是这么回复的:“是由于zabbix的性能瓶颈问题,falcon可横向扩展,可支持上万台服务器的监控,目前公司的服务器早已经超出zabbix可承受的范围了,因此更换为了falcon。” 可是这些都是基于脚本的,只能进行一些基础监控。这类监控属于故障快速发现类。美团点评研发了一款分布式实时监控系统叫CAT(Central Application Tracking), 是基于纯Java开发的分布式实时监控系统。能够基于日志埋点作更细粒度的监控。它属于系统问题分析类。

  大公司的架构除了平时的业务架构,技术架构,软件架构以外,还有一块是团队能力建设。打造团队核心竞争力。考虑这方面,设计构建本身的中间件就极为重要。这一块,在咱们部门,除了我在作的搜索引擎中间件,还有阿里来的阳哥设计了一款异常统一处理平台。这个就是用spring mvc建立一个java bean。这个bean拦截了全部error级别的日志,将它异步发送的统一的redis集群。有统一的日志服务端再进行更详细的处理:包含给相关人员发报警邮件,有统一的日志分析平台,便于对各个模块的性能,代码质量作量化。logback自己也是能够发送报警邮件的。可是这个有性能问题,报警邮件过于频繁会影响正常服务的。

  下面说一下CAT。咱们目前线上也在用这个东西。CAT的一个重点是埋点,它决定了实际上能作的事情。

  • Transaction埋点,主要记录一些跨项目,跨模块一些调用。最主要有远程服务,数据库以及缓存。
  • Event埋点,主要记录事件以及异常。最多见的场景就是当埋Transaction时候,须要event做为补充,好比记录当时访问参数,特殊诡异路径的分析,还有异常信息记录。
  • Metric埋点,主要用于记录一些实际的业务指标,用于运维监控。Metric自己就是一个针对周期性时间序列的实时的Metric监控系统。
  • Heartbeat埋点,表示程序内按期产生的统计信息,如CPU百分比,内存百分比,链接池状态,系统负载等。
  • Trace埋点用于记录基本的trace信息,相似于log4j的info信息,这些信息仅用于查看一些相关信息。

  CAT监控系统将每次URL,Service的请求内部执行状况都封装为一个完整的消息树,消息树可能包括Transaction,Event,Heartbeat,Metric和Trace信息。

  昨晚跟一个美团点评的哥哥聊天,了解到美团喜欢用数听说话,这个CAT的数据是这样的:号称单台机器QPS 15w。而后:咱们没有那么大并发,因此没试过是否是真的[擦汗]

差点忘了大事:问问你们最近有想动一动的么?在北京的童鞋有想去阿里,蚂蚁金服,美团点评,美团金融,猫眼电影,京东,乐视网咱们部门也在招人,还有东直门的创业公司,燕郊的创业公司。总之,均可以找我,简历发我邮箱 xiexiaojing@le.com。

 

欢迎你们多留言,说出本身的建议或者关心的内容。我尽可能每条都回。这些都是督促我思考的宝贵资源~~谢谢你们的阅读,固然更感谢默默推荐的朋友😊

=============================== 华丽的终止符 ================================

相关文章
相关标签/搜索