我的那些年(10)~来到更大的团队,做了架构师
我的那些年(10)~来到更大的团队,做了架构师
- 又回石景山上班了
- 继续使用LINQ+Mvc技术
- EF被团队广泛的使用
- 为项目上了全文检索
- 研究了微软的NlayerApp这个领域驱动框架
- 看了
Microsoft .NET企业级应用架构设计
并得到了具体应用 - 公司开始上redis高可用集群
- 公司开始上mongodb高可用集群
- 公司开始上moebius sqlserver高可用集群
- 公司项目用了Xamarin
- 公司项目用了node.js
- 公司项目使用了Lind.DDD框架
- 公司项目用了.net core
- 感觉自己是时候离开了
又回石景山上班了
2011年9月,我如愿的收到了xx教育集团的offer,我离开了良乡,去了更大的平台发展,石景山对于我来说是个熟悉的地方,我的第一份工作就是在这里,就是计算机培训老师,薪资500,呵呵!转眼已经7年过去了,我终于做了程序员,那可是我上学时的梦想!老师总和我们说,如果你们能去中关村做个『蓝领』,薪资也能到3,5千,那句话对我是多少的诱惑呀!今天终于实现了,可以对着电脑写代码了,而且还是为其它人设计总体架构,当然也是有很大的压力的,毕竟是第一次做系统架构,在一个系统开发过程中,问题总会出现,就像墨菲定理一样,问题只要有可能出现,就一定会出现!我始终相信,出现问题,总有解决的办法,只是我们还没有找到!
继续使用LINQ+Mvc技术
来到新公司后,看了他们的项目,也是使用linq+mvc做的,对我来说是轻车熟路,在开发过程中有一些比较性能差的写法,我也都指了出来,像IQueryable和IList的区别,什么时候用它们等,为项目提供了分页控器,对seo这块的优化,重写了一些模块的路由,为linq提出了仓储模式的概念,几年后发展大部分框架都使用了repository模式,而目前的springboot.jpa也是使用了这种统一的数据访问模式,呵呵。
EF被团队广泛的使用
在项目上线后,我们又接了新的项目,这回公司叫我负责整个的架构,我提出了ORM使用ef来代替linq,因为linq2sql这个工具微软已经不更新了,而ef是他们的主流ORM工具,所以新项目用了ef,并且我写了关于EF的仓储实现,封装了curd实体和curd集合的操作,添加了对分页,排序,动态查询的支持,那应该是2012年的事,在这一年我的博客已经有2年的历史 了,也有不多粉丝,有时候,博客成为我学习的动力!
为项目上了全文检索
项目在查询上表现不是很好,对于查询条件的选择是多样的,需要支持like检索,我们知道数据库使用like是不走索引 的,也就是说不走b-tree,这样对数据库性能影响很大,基本就是全表扫描,所以我打算上lucene这个全文检索工具,这个我在上一家单位用过,缺点就是索引文件更新实时性问题,我在网上找了一些资料,发现他公开了一些api,我于是在后台管理中添加了对它的支持,当后台有资源更新中,我就出发lucene的api,让索引文件按需更新,注意只是更新需要的那部分资源,后来这种技术在solr里被友好的实现了,哈哈!
lucene是solr的前身,solr只是对lecene进行的二次封装,以lucene为核心的框架还有elasticsearch。
研究了微软的NlayerApp这个领域驱动框架
2013年,在工作之余,我也看了一个微软官方为DDD设计的demo,即NlayerApp,这个框架写的不错,分层清晰,与传统N层架构有很大区别,它以领域对象为核心,如果你的领域对象需要对数据库操作,你需要在领域层定义IRepository接口,然后在数据层去实现,也就是说,数据层是依赖领域层的,数据层只负责持久化数据,一般地,我们在设计仓储模式时,有一个统一的泛型对象,程序员只实现自己具体的持久化逻辑就可以了,不需要关心底层的实现。
领域驱动设计的宗旨就是一切于领域模型为核心,一切由它去展开,持久化只是一种工具,它并不是必须的。
看了Microsoft .NET企业级应用架构设计并得到了具体应用
在工作之余,我还看了微软的《Microsoft .NET企业级应用架构设计》这本书,这书可以说对架构师的朋友是一个大餐,里面从代码重构,设计模式应用到分层设计原则应有尽有,我前后看了好几篇,自己也把核心的内容提取出来,写在word里了,记得还给同事们讲过,确实,一本好书对于程序员来说非常重要,他使你更加快速的成长!
- Microsoft .NET企业级应用架构设计
- 代码大全
- 重构,改善即有代码的设计
- 代码之美
- 代码之殇
- 你必须知道的.NET
公司开始上redis高可用集群
2013年,公司在自己的服务上搭建了redis,开始只是单点模式,之后发展到了高可用集群模式,我们使用redis时还没有cluster,所以集群用的是Sentinel+Twemproxy实现的,Twemproxy就是代理,程序端直接与它通讯,而sentinel负责与redis db通讯,当db宕机时,它会通讯sentinel,然后sentinel会把最新的redis master告诉Twemproxy,这有一个好处就是程序端不需要关心真实的redis db,而如果你的项目比较小,也可以直接用sentinel就可以实现高可用,我的lind.ddd.nosql里对 redis进行了二次封装,已经完全支持这种哨兵集群了。
redis sentinal会封闭一些指令,只公开几个需要的指令,这是一种安全的考虑
公司开始上mongodb高可用集群
在2014年时,公司有了java部门,负责另一个项目,而他们的经理要求上mongodb,说它是个文档数据库,对日志这种数据 支持的很好,而且支持复杂的查询,而且本身就可以实现高可用,分片,复本等模式,于是CTO同意上mongodb了,这以后的项目里,像考题,留言,投诉等非关键数据都存储到了mongodb上,我做为和运维走的很近的人,也和运维一起搭建起了mongodb集群,做为.net团队的架构师负责新技术的研究工作。
mongodb的集群配置需要注意,为了让选举有效,需要集群节点为奇数个
公司开始上moebius sqlserver高可用集群
公司的sqlserver数据库一直是单节的,而在业务和数据量上来之后,单点是靠不住的,所以我们考虑为sqlserver上集群,它本身没有什么好的方案,所以我们选择了第三方moebius来做这事,它是一个高可用集群方案,有一个主节点和若干个从节点,主节点负责写数据,然后实时同步到从节点,当你的请求是select时,它会走读节点,当你的请求是update,delete,insert,transaction时会走写节点,由于moebius采用了实时同步方案,所以需要用到msdtc,即分布式事务,这对于多点数据同步来说是有负作用的,所以你的读节点不要太多,太多反而对写影响比较大。
moebius一般设置一个主,两个从,然后它对外暴露的是vip,程序端直接连接vip地址,然后它会对sql语句进行拦截,将对应的语句进行转发
公司项目用了Xamarin
公司开发了一个手机的h5网站,希望开发一个app,然后登陆这块用原生的,然后页面用h5网站即可,原生的我们使用了微软的xamarin来实现,我主要做的是一个基于安卓环境的app,比较简单,但确实可以实现,打包之后体积比较大,兼容性给它满分!
公司项目用了node.js
在2015年公司打算用node.js做高并发项目的入口,然后在node.js项目里再进行二次转发,node.js由于自己的特点,它是单线程的,使用方法回调实现异常,它是非阻塞的产品,与现在比较火的go类似,只不过后者是多线程的,它们最大优势就在于高吞吐量的支持上,我们的node.js运行在centos上面,之后把它部署到了docker里运行,当然这已经是2017年的事 情了,docker我主要在下一家单位用的比较多,后面也会讲到。
公司项目使用了Lind.DDD框架
在公司6年时间里,自己贡献了lind框架,主要用在底层框架上面,把它发布到nuget之后,公司的新项目可以使用使用,而且我还把后台模块进行了封装,使得他可以在几分钟内完成一个后台管理系统的搭建工作。
lind框架主要包括了对很多第三方组件的二次封装,统一进行了配置和封装,让开发人员更方便的使用,像cache,redis,mongodb,solr,ef,dapper,domain,logger都进行了统一的配置
公司项目用了.net core
2016年底,公司打算在一个小项目中使用.net core,当时它才出来没多久,只是记得是.net core1.1吧,自己也学习了一下,不过没有更深入的研究,只是对efcore进行了设计,但也出现很多问题,估计这些东西要到.net core2.0才能解决了
工作之余爱上了踢毽子
工作之余,我同事们也到天台上踢踢毽子,锻炼一下身体,一天总坐着肯定是不行的,大家在一起还打了比赛,每两个人一组,中间一个大网,像是打网球,只不过我们用脚来完成!
感觉自己是时候离开了
在2017年,我感觉自己在公司也没什么发展了,想出去看看,于是开始找工作了,事实上,我这个年纪找工作不是一件容易的事,需要公司对我非常了解,然后非常需要我这种对.net框架比较有经验,对技术比较有追求的人才会录用我,这一点我自己也很清楚,因为咱们学历不高,不太会说话,要的薪资也不低,所以只能相互碰了!
每个人都应该对自己的未来有个规划,走技术,还是走管理,自己心里要有明确的答案!