热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

一次上线事故,30岁+的程序员踩坑经验之谈

本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了一次上线事故,30岁+的程序员踩坑经验之谈相关的知识,希望对你有一定的参考价值。







点击上方关注 “终端研发部


设为“星标”,和你一起掌握更多数据库知识

遇到的一些坑


事故发生在11月8号,虽然做的不是什么电商项目,但是对于双十一活动来讲,作为拥有几百万用户量的在线医疗项目,我们也进行了双十一7天的优惠折扣活动的升级改造,毕竟是敏捷性开发,两天应该差不多能搞定。但是在上线前的这一天,有几个接口在大量数据请求,之前我在项目中做了一个日志服务,全量存储分析日志后的数据,每天大概有1亿左右的数据。


第一次安装测试时,我只部署了一个opentsdb,读写都一个,经常出现opentsdb假死,只能重启opentsdb才能解决问题。


后来,我干脆部署了两台opentsdb,发现写数据的opentsdb运行稳定,而读的opentsdb依然经常假死,我也只是查询最近24小时的数据,究竟是什么问题造成的呢?


然后接着google,百度,最终在官网网站上看到一条有用的信息:建议不要跨太大时间范围查询,否则容易出现内存不足。因为opentsdb是根据查询条件把所有的符合条件的数据都查到内存再聚合,时间范围太大容易导致内存不足。


最终搞到凌晨1点多,通过调度任务,先把全量的数据按5s,2min,5min,10min等聚合,后台又简历多个hbase集群,一个专门存储原始的监控数据,另外一个存储聚合后的监控数据。可以极大提高查询效率。


勉勉强强给自己加了一个鸡腿,然后有一股凉凉的感觉:我太难了!



PS: 这里不得不吐槽一下opentsdb了,有时候让人感觉很堪忧啊


opentsdb特别依赖hbase,增加维护hadoop和hbase的难度,有很多的数据冗余,比如指标uid会存储多次,tagk,tagv也会存储多次;虽然做了编码的工作,将字符串转化为3字节的数字,但是依旧有很大的冗余,hbase上多维查询困 ,聚合能力不足


但是优点也有的,一个小时的数据一行,容易范围查询 一个列簇 ,一个指标的数据在一个文件中,所以前面的人时序数据库的选择方面才会使用吧!


有人要问了,于哥,你都这么大了,做了管理还搞开发啊?


纳尼?谁说做leader不用搞开发了?


你们不做管理,不知道做管理的痛苦!管的事情比较多不说,项目中遇到问题了还得亲自上!况且我目前还是在做敏捷开发,简直是夜不能寐啊!


啥,敏捷性开发?


那么,我就给大家普及一下的敏捷性开发的知识吧


敏捷性开发的程序员有多难?


我们都知道,敏捷开发模式是项目进入实质开发迭代阶段,用户很快可以看到一个基于架构版的产品。敏捷注重市场快速反应能力,也即具体应对能力,主要体现在个体和交互胜过过程和工具。


缺点就是敏捷注重人员的沟通,忽略文档的重要性,若项目人员流动大太,又给维护带来不少难度,特别项目存在新手比较多时,老员工比较累。


作为一家敏捷开发的项目经理,每天加班熬夜的盯着项目,我只能说我自己太难了


比如,作为管理者在企业中经常会遇到下面几个问题:


1、自己的技术栈该如何提高?


2、提让保证项目快速开发和迭代?


3、怎么保证高风险的项目实施 


4、怎么做好构架、需求和设计出自于自组织的团队?


 


最终的目的是要保证项目的快速高效运转起来,这才是我们想要的一个效果。


所以,我一直强调,作为管理,或者作为大龄程序员,你一定要做好定位,不然你卷到35岁,失业就会找上你!


大龄程序员的职业发展


我觉得你可以朝着以下几个方向发展


1、做技术方面的专家,那这里需要对代码非常的热爱,并且能够静下心来学习


2、可以做项目管理,像我一样,你可以走技术管理路线,或者是产品管理路线,一开始可能是先从程序员做起,慢慢发展为项目组长,到项目经理,再到cto


3、做产品,一朋友现在转了产品,薪资福利待遇也是不错的


4、在家接私活,做外包私活,做一个佛系程序员(其实有点不建议的)


5、做转测试


6、创业,目前的行情下,不建议创业,就像360老总说的那样,失败是必然的,成功是偶然的,这里呢,我推荐指数1颗星,难度5颗星



无论你走哪一行,我都希望你时刻保持学习,持续精进技术!


如何提高核心竞争力呢?这里我也分享了自己的心得,助力大家能在职场技术上有一个提高


编程的学习


这里都需要学习那些知识呢?


年龄越大,你要对自己的技术栈有个详细的认知和规划


对于技术栈的要求:Java 集合,前端了解,mysql,redis,spring,Springboot,Springcloud,jvm,Linux,Mybatis,SSM,消息中间件rabbitmq等 JVM、多线程、Spring全家桶、Dubbo、Netty、Elasticsearch。数据库肯定是必须且非常必要的,无论将来是运维还是管理,还是深究技术!


编程进阶的话你可以学习和《Java编程思想》和《大型网站技术架构》这两本书籍,作为进阶是必须要学的一些编程有深度的两本书,分布式也是非常的重要的。



《Java编程思想》在我看过的所有Java书籍里面,这是最全、最有深度的一本,如果错过了那就太可惜了。



当然,如果你Java基础不怎么好,可能看到后面会有点费劲,那么你可以从《Java核心技术》这本看起,它会比较合适,这本书有I卷和II卷,都非常不错。


这本书剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计案例,为读者呈现一幅包括技术选型、架构设计、性能优化、Web 安全、系统发布、运维监控等在内的大型网站开发全景视图,并且适合产品经理、项目经理、测试运维人员等了解网站技术架构 一本很值得看的书籍!


数据库的学习


除了 Mysql,mongodb,Oracle,redis,你也应该了解主流的时序数据库,比如opentsdb ,Prometheus,Influxdb,TDengine等。


补充一下:可能有很多人不知道什么是时间序列数据?


时间序列数据就是一个数据源会每隔一段时间产生一条数据,除了时间戳和值不一样,其他都相同。比如一个cpu的使用率,随着时间的变化不断变化,那么它产生的数据就是时间序列数据。



物联网、大数据和互联网监控等拥有海量时序数据的场景 ,在穿戴设备中也会用到时间序列,比如心率,体温随时间的变化。


常见时序数据库对比



PS: 于是有人要问了,于哥,**像我上述的时序踩坑经历那样,**有没有更快更适合更成熟的时序数据场景数据库设计方案呢,毕竟有时间需要不停的更换存储方案 !毕竟对于想敏捷性质的开发公司来说,高效开发,节省存储空间,提高时序数据的查询,减少研发和运维的复杂度这才是王道!


答案肯定是有的——那就是开源的TDengine开源时序数据库!



github项目地址
https://www.taosdata.com/cn/



这个是一个非常不错的时序数据库解决方案,该项目在Github上很受欢迎,目前在已经有17.5k star!fork也有4000多了。


TDengine优势主要是在于数据插入、查询的性能比通用的大数据平台好10倍以上,存储空间也大为节省,采用SQL接口,与第三方软件能无缝集成,大幅简化了物联网平台的系统架构, TDengine可广泛运用于物联网、车联网、工业互联网、IT运维等领域。


更主要的是,兼容OpenTSDB等时序数据库,可以通过taosAdapter等软件无缝迁移,学习起来比较方便,技术开发和运维,省事产品可以更直观的学习和使用代码 !


TDengine核心代码开源,真正的国产自研数据库,国产的数据库,绝对要去支持的!


目前很多大型互联网公司都在使用这个时序数据库方案,记得同心源基金管理公司,数据量比较庞大,并且对数据的插入和查询要求是极高的



这张图中我们也可以看出,一些其他常用的函数比如max、last,基于TDengine的缓存等技术也都实现了毫秒级返回数据。


因此,如果在这种大数据,互联网监控拥有海量时序数据的场景,使用这个解决方案,将大幅减少了研发和运维的复杂度与成本。



项目链接:https://github.com/taosdata/TDengine
官方地址:https://www.taosdata.com/cn/



总结


对于开发年龄大的程序员来讲,在目前大数据时代,唯有持续性的去学习,找到适合自己的目标和定位,培养架构思维。


除了技术,你还应该学会


1.向比你厉害的人讨教,三人行必有我师


同时将学会的东西分享给其他人。学与教的过程中,能快速把知识给掌握牢固,学以致用


2.可以多去学习一下数据库,时序数据库是主流,TDengine是一个不错的解决方案,学习的时候可以多做些笔记,写写博客啥,对自己找工作也是很有帮助的


3、不要局限于当前自己所负责的那一块,了解上游的一些业务会对你接下来的架构有很大的帮助


4、多思考,有优秀的人打交道,无形之中你也会有所收获,有规划,有所定位的


好,我是架构师小于哥。


欢迎关注我,我会偶尔出没,分享软件架构和编程相关的知识。


今日好文推荐


GitHub上非常实用的40个开源JAVA项目


XShell收费太贵?快试试开源的NuShell,好用!


GET 和 POST请求的本质区别是什么?看完觉得自己太无知了...


MyBatis批量插入数据你还在用foreach?你们的服务器没崩?



点个在看少个 bug 👇






推荐阅读
  • Java工程师书单(初级,中级,高级)
    简介怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作一两年之后开始迷茫的程序 ... [详细]
  • Android系统启动过程分析一、Android平台架构首先贴一张Android系统架构图方便理解整个Android架构,这可以让我们从整体上对整个启动流程有个大概认知。可以看出整 ... [详细]
  • Java开发面试问题,2021网易Java高级面试题及答案,实战案例
    前言大厂面试真题向来都是各大求职者的最佳练兵场,而今天小编带来的便是“HUAWEI”面经!这是一次真实的面试经历,虽然不是我自己亲身经历 ... [详细]
  • 前言最近一段时间在整公司项目里一个功能的优化,用到了多线程处理。期间也是踩了不少的坑,在这里想说下我遇到的问题和注意事项。以及怎样知道启动的那些多线程都 ... [详细]
  • java程序员_9大行为导致Java程序员薪资过低, 你有几个?
    Java程序员薪水有高有低,有的人一个月可能拿30K、50K,有的人可能只有2K、3K。同样有五年工作 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • svnWebUI:一款现代化的svn服务端管理软件
    svnWebUI是一款图形化管理服务端Subversion的配置工具,适用于非程序员使用。它解决了svn用户和权限配置繁琐且不便的问题,提供了现代化的web界面,让svn服务端管理变得轻松。演示地址:http://svn.nginxwebui.cn:6060。 ... [详细]
  • 【Java面试】简单说一下你对序列化和反序列化的理解
    Hi,大家好,我是Mic一个工作4年的粉丝,投了很多简历好不容易接到一个互联网公司的面试邀约。在面试第一轮就被干掉了,原因是对主流互联网技术理解太浅了。其中就有一个这样的问题:“简 ... [详细]
  • 开发笔记:Python之路第一篇:初识Python
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Python之路第一篇:初识Python相关的知识,希望对你有一定的参考价值。Python简介& ... [详细]
  • 生产环境下JVM调优参数的设置实例
     正文前先来一波福利推荐: 福利一:百万年薪架构师视频,该视频可以学到很多东西,是本人花钱买的VIP课程,学习消化了一年,为了支持一下女朋友公众号也方便大家学习,共享给大家。福利二 ... [详细]
  • java和servlet交互,JSP与Servlet之间的交互,传值
    一.Servlet首先要明白一点,servlet需要容器的支持才能够运行,如Tomcat、jetty达到servlet的请求,需要ServletRequest对象和S ... [详细]
  • 阿里首席架构师科普RPC框架
    RPC概念及分类RPC全称为RemoteProcedureCall,翻译过来为“远程过程调用”。目前,主流的平台中都支持各种远程调用技术,以满足分布式系统架构中不同的系统之间的远程 ... [详细]
  • Java中线程池,你真的了解会用吗
    2019独角兽企业重金招聘Python工程师标准在《深入源码分析Java线程池的实现原理》这篇文章中,我们介绍过了Java中线程池的常见用法以及基本原理。在文中 ... [详细]
  • dubbo学习 一 dubbo概述
    1,背景1,网站刚开时候的时候可能所有的功能业务都在一个应用里面2,当业务不断复杂,流量不断增多的时候,就需要将原先的一个应用划分成多个独立的应用。3,当分出来的业务越来越多的时候 ... [详细]
author-avatar
萱恭俊逸明靖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有