点击上方关注 “终端研发部”
设为“星标”,和你一起掌握更多数据库知识
遇到的一些坑
事故发生在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 👇