有好几个群友问我为什么最近更新变慢了。工作忙是一方面,另一方面是我更新文章的能源的确降落了。近大半年始终在更新的《对线面试官》系列,到当初曾经40篇了。

说实话,过后我更新该系列有很大一部分是为了本人的面试。而当初入职了当前,短时间内也不会跳槽了,所以更新该系列的能源就天然降落了。

话说回来,我前段时间在面试的时候,照着《对线面试官》系列所筹备的常识,根本都没太大的问题。

最近我在工作做的事件还须要不少的工夫积淀,短时间内又写不出比拟好的文章跟大家一起分享。

基于以上的问题,这段时间就如同进入了死循环,出不来了。

01、想法

有很长的一段时间,我都在想要不要写个「小我的项目」继续迭代。

这样一来,我在闲暇的工夫就能够持续写代码了,并且在写我的项目的过程中又会潜意识督促本人一直地学习。

之前闲暇的工夫都在码文章和学习,根本没怎么写代码的(:

在工作倒是始终写代码,只不过写的代码都不是我喜爱的

尽管本人的代码写得很烂,但本人并不感觉本人的代码很烂。很多时候感觉本人的代码写得挺好的,而共事进来做了一把需要,感觉代码又变烂了。有没有人跟我有雷同的想法?

自从毕业工作了当前,就越来越发现自己所把握的常识都是全面的。绝大多数人去到公司,技术环境都是搭好的,对应的技术都是封装好的,而咱们只是在现有的根底之上修修补补

很多时候咱们没得选,公司用什么就始终用什么。除非本人开个新的我的项目,做新的性能,并且通过调研之后可能咱们所想的技术栈能在本人的我的项目中用得上。

02、难点

我还记得我以前大leader已经在一次会议上说过:当初你们能做到这么多事件,很大起因是有公司这一整套环境。如果你来到了公司,你能搭建进去并且完满运行吗?

我站在我过后所保护的零碎角度来想了下,认为的确比拟难。

过后我保护的是触达零碎(简略了解就是给用户发消息的),听着性能很简略,但实际上里边用到的技术栈还是蛮多的:RPC调用、分布式配置核心、Redis、Flink、MySQL、SSM开发环境、MQ、规定引擎、ELK日志、分布式定时任务调度、Hive、Elasticsearch等等

根本是把支流的Java后端技术栈用了个遍(:

有的人可能就会有疑难了;你外围的性能这么简略(就发个音讯),在生产环境下你是真的用上了下面所讲的技术栈吗?你不会是写博客就在这里吹牛逼吧?我不信。

其实是真的用了这么多,且每个技术栈都有存在的必要性:

  • RPC调用:例如,营销音讯须要依赖DMP(用户画像零碎)数据,须要调用DMP的接口。微信类音讯须要accessToken,须要调用用户服务相干接口等等,这些依赖都须要近程调用(近程调用在代码侧比拟优雅的就是RPC调用了)
  • 分布式配置核心:灵便配置各类信息,这种技术框架就是YYDS。例如:能够把限流的值写在分布式配置核心,那限流的速率就能够灵便改变了。
  • Redis:高性能内存读写,能够用来去重过滤或者统计数据。例如:应用Redis做去重性能(有TTL工夫非常适合音讯下发业务)
  • Flink:实时流解决平台,能够用来荡涤埋点的音讯(所谓埋点的音讯实际上就是音讯链路数据信息,在音讯下发过程中记录要害链路信息)
  • MySQL:存储须要事务撑持数据或者变动较少的元信息存储。例如:小程序模板的元信息就能够存储在MySQL
  • MQ:零碎解耦、异步和削峰的好助手(接管埋点信息或进步响应接口速度)。例如:大量的日志数据能够先扔到Kafka
  • 规定引擎:联合分布式配置核心可做到常见需要毋庸零碎公布即可实现。例如:把短信接入的逻辑写在规定引擎中,新的短信接入毋庸公布零碎
  • ELK日志框架:排查解决问题好帮手。例如:在要害的中央打上log,不再登陆每一台机器上看日志,间接通过关键字搜寻
  • 分布式定时任务调度:集群环境下定时更新数据以及触发工作。例如:营销音讯会依据工夫定时发送,在集群环境下应用定时任务调度框架指派某一台机器触发
  • Hive:离线数据存储,助数据仓库失去触达平台数据
  • Elasticsearch:触达后盾页面按内容/题目匹配查问数据
  • ....

能够看到列出的技术栈,每项技术都是能够深刻地去钻研(有肯定规模的公司里,下面提到的每一项技术都会有专门的开发人员去迭代和保护)。

除了列出来的后端技术栈,一个比拟成熟的我的项目,还有很多的细节,包含但不限于:监控告警、自动化集成部署(公布)、负载平衡(Nginx)这种运维侧的货色。

这些货色光靠一个人的确是很难做得比拟残缺的(:

03、血赚

入行以来,我始终充斥都着好奇心。想晓得某些业务场景是怎么玩的,某些技术是怎么玩的,本人所负责的货色哪里存在缺点,有什么中央能够改善的,跟他人家公司同类的零碎相比是怎么样的,还能怎么持续晋升。

但因为公司相干的内容是不能随便公开的,所以很多时候就是"闭关锁国"本人造着玩。(至于零碎好不好,自我感觉是良好的。跟他人有多大的差距,我也不晓得)

当初看我的公众号有小白,也有很多大公司的大佬。

假如我有不错的教训分享时,小白看完之后可能借鉴我的教训进而晋升本人,我感觉我写的货色就很值了。

当我的代码实现或思维曾经是落后时,如果能有大佬帮我指出,我进而学习并调整,我这又是一波血赚。

04、我的项目内容

我以前做的是广告和触达零碎的,对别的我的项目就不太理解了。我还是学生的时候,网上很火的是商城我的项目(不过当初如同也很火)。

以前还没工作的时候我不懂为什么网上这么多做商城的我的项目,当初工作了当前,我就更不懂了。

互联网业务其实十分多,电商只是其中一个业务

以前有幸负责面试官,面过一些实习生,好多简历上也是写的商城。对于这类我的项目,我问起我的项目或技术细节,简直都表白得不怎么样(商城这类我的项目,很多性能在实在开发场景业务,感激商城这些零碎对于初学者而言,还是有些艰涩)

(:像秒杀什么的,据我理解,在生产环境下也远没设想中那么简单。

这次从零开始写我的项目,我想还是以【触达零碎】为主,这玩意比拟好了解,并且简直每家公司都会有这类的零碎(如果没有,那就该换一家有的)

05、文章更新

我的项目不会很快地就迭代成型,我是打算以博客的模式来始终迭代更新,这个过程能聊的货色还是很多的,有的内容可能我也不太确定,也会收回来一起探讨探讨,比如说:

  • 在构建我的项目的时候,我会讲讲为什么用Maven,为什么用SpringBoot
  • 在写业务代码的时候,我会讲讲为什么我是本人喜爱写单表构造,而不join或者各种子查问
  • 为什么这个场景要用分布式配置核心,为什么要用规定引擎,能带来什么益处
  • ..

想法有很多,本人也有很多不相熟(我所讲的未必是对的,然而通过交换和深刻学习之后,我还能把我的思考过程再梳理一遍收回来),我感觉在这个过程,对于小白新人来说,都会有所播种。

其实很多细节我也还没思考好,比方前端对我来说就是件比拟头疼的事(不过这两个月我预估都不会碰)

我发现还蛮多人挺在意我前端应用什么技术,到时候怎么写。

说实话,我也不晓得。我前端在大学的时候搞过HTML+CSS+JavaScript+jQuery+Ajax+BootStrap,作为后盾页面大略能用的成果。

我毕业听得比拟多的都是Vue+Angular+React了,还有Node.js的环境等等,这些我一个都没学过(我目前也提不起趣味去学)

前端这块还有很多细节敲定,到时候再说吧。说不定到时候或者可能大略有大佬能够反对下呢?不过很可能还是我本人来写,毕竟我本人能做到的事件,也没必要麻烦他人。

所以,明天先更新下austin的介绍以及Q4对austin我的项目的安顿吧,后续等我这个Q的安顿做完了,我就持续补充第零篇

站在我的角度,我认为:austin我的项目的业务很简略,可玩性很足,能用到的技术栈也很丰盛,比拟适宜初学者

前面在写的时候,我会交叉些我认为我的项目的亮点,我的指标是:该我的项目会成为Java小白简历上的一个我的项目(不再是清一色的商城我的项目)

06、我的项目介绍

austin我的项目外围性能:发送音讯

我的项目呈现意义:只有公司内有发送音讯的需要,都应该要有相似austin的我的项目,对各类音讯进行对立发送解决。这有利于对性能的收拢,以及进步业务需要开发的效率

07、我的项目流程图

austin我的项目外围流程austin-api接管到发送音讯申请,间接将申请进MQaustin-handler生产MQ音讯后由各类音讯的Handler进行发送解决

Question 1 :为什么发个音讯须要MQ?

Answer 1:发送音讯实际上是调用各个服务提供的API,假如某音讯的服务超时,austin-api如果是间接调用服务,那存在超时危险,拖垮整个接口性能。MQ在这是为了做异步和解耦,并且在肯定水平上抗住业务流量。

Question 2austin-streamaustin-datahourse的作用?

Answer 2austin-handler在发送音讯的过程中会做些通用业务解决以及发送音讯,这个过程会产生大量的日志数据。日志数据会被收集至MQ,由austin-stream流式解决模块进行生产并最初将数据写入至austin-datahourse

Question 3austin-adminaustin-cron的作用?

Answer 3autsin-adminaustin我的项目的治理后盾,负责管理音讯以及查看音讯下发的状况。业务方可依据通过austin-admin治理后盾间接定时发送音讯,而austin-cron就是承载着定时工作的工作了。

08、我的项目技术架构图

2021-11~2021-12实现性能:

实现性能所需引入的技术栈:

Gitee链接:gitee/austin

GitHub链接:github/austin

关注我的微信公众号【Java3y】聊我的项目!【对线面试官+从零编写Java我的项目】 继续高强度更新中!求star

原创不易!!求三连!!