随笔分类 -  架构

摘要:后台计划任务设计思路: 日志埋点处理,便于prd排查问题 2种主动job搭配规范(正向job、反查job) 1种消息接收的处理规范,重试机制,返回状态 job开关维度 数据流图 线上暗job-便捷性-工具job 处理流水表的设计 分布式多副本考虑 一一说来 日志埋点处理,便于prd排查问题 prd环 阅读全文
posted @ 2021-05-23 01:15 McKay 阅读(1045) 评论(0) 推荐(0) 编辑
摘要:本文讲述k8s最新版的搭建(v1.15.2) 分如下几个topic步骤: 各个节点的基本配置(以下命令每个节点都要执行:Master, Work1, Work2) IP自己变化下,根据实际情况 然后需要准备docker images(任然需要在master, worker1, worker2节点上分 阅读全文
posted @ 2019-08-18 23:03 McKay 阅读(1556) 评论(0) 推荐(0) 编辑
摘要:模板引擎相信大家是经常使用的,但是实现原理估计没多少人知道(你要是说不就是replace嘛,那我也无话说了...)。先来看看这个SimpleTemplate想实现的是什么功能吧:是个C#端的模板引擎模板中能放普通变量(i, j, index, username这种直接了当的变量名)模板中能放复合变量... 阅读全文
posted @ 2015-10-07 16:03 McKay 阅读(5402) 评论(4) 推荐(0) 编辑
摘要:看到状态,大家能想起什么?抵触什么?我想到的有:状态机、状态模式、UML状态转换、一堆一堆的验证能否执行当前函数的验证代码抵触的有:UML状态机图如下:正视状态图只要有先后顺序的行为都可以想象成状态机,因为存在必须先做什么才能再做什么的现象,所以这种现象很常见,很普遍给出了流程图后,落实到代码级别还... 阅读全文
posted @ 2015-10-06 21:27 McKay 阅读(3603) 评论(3) 推荐(3) 编辑
摘要:Question: 为何sql解析和高大上有关系?Answer:因为数据库永远都是系统的核心,CRUD如此深入码农的内心。。。如果能把CRUD改造成高大上技术,如此不是造福嘛。。。CRUD就是Create, Read, Update, Delete,转换成sql语句就是insert, select,... 阅读全文
posted @ 2015-06-14 22:52 McKay 阅读(12460) 评论(1) 推荐(7) 编辑
摘要:规则引擎规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。个人理解变化点过于集中在一点,为了适应变化,而给各种场景分别写了各自关于那点的代码逻辑,尽管主要的业... 阅读全文
posted @ 2015-03-11 21:51 McKay 阅读(17060) 评论(30) 推荐(17) 编辑
摘要:概述由于种种原因,RabbitMQ到目前为止,官方还没有实现优先级队列,只实现了Consumer的优先级处理。但是,迫于种种原因,应用层面上又需要优先级队列,因此需求来了:如何为RabbitMQ加入优先级队列特性。查询资料后,得知RabbitMQ虽然官方没有支持此特性,但是社区已经有相关优先级队列插... 阅读全文
posted @ 2014-11-04 06:44 McKay 阅读(14567) 评论(8) 推荐(6) 编辑
摘要:前言系统一大,就会拆分成多个独立的进程,比如web+wcf/web api等,也就成了分布式系统。要看一个请求怎么从头到尾走的,就有些困难了,要是进行DEBUG、跟踪,就更加麻烦了,困难程度要视进程多少而定,越多越复杂。分布式日志收集系统就登场了。今天介绍一款全开源日志收集、展示系统 - logst... 阅读全文
posted @ 2014-10-22 23:55 McKay 阅读(38298) 评论(0) 推荐(3) 编辑
摘要:虽说消息队列的用法很简单:PUB/SUB, PRODUCER/CONSUMER,不过真做起来还真麻烦。先说下原始需求:Web前端发送命令消息,后端Consumer处理,然后前端得到结果需要支持Windows服务很快,下图就出来了:先来分析分析:前端怎么知道后端已经处理完成?前端如何在处理完后的第一时... 阅读全文
posted @ 2014-10-21 22:24 McKay 阅读(5347) 评论(1) 推荐(6) 编辑
摘要:普通的zk用法,如下写法:zk.Exists("/aaa", true);zk.Create(...);但是由于这些API会抛Zookeeper的Exception,比如ConnectionLossException, NoNodeException等,所以必须配合一堆try/catch的机制来ca... 阅读全文
posted @ 2014-07-08 23:11 McKay 阅读(3585) 评论(3) 推荐(5) 编辑
摘要:基于zookeeper写了个Leader选举类库demo,场景如下:上图中的Program1..4可以部署在1台server上,也可以部署在多台server上,也可以是一个进程中的多个线程。运行效果:初始化时(4个全开)把第四个(也就是此时的Leader) 关闭后把某个Follower角色的进程关闭... 阅读全文
posted @ 2014-07-03 08:57 McKay 阅读(6543) 评论(2) 推荐(6) 编辑
摘要:什么是重构?是在不改变系统行为的前提下,对内部代码的重新组织,提高可理解性和降低修改成本。为什么要重构?一个小修改牵涉到了多个地方,且这些点处于未知状态不易读懂代码(包括读懂自己1个月前的代码)新手修改代码上手慢,需要很久才能进行有信心的代码修改需求变化时,代码层面响应慢什么时候需要重构?随时随地的重构,也就是从一开始就进行小范围的重构,就不至于时间久后没法平滑的重构了上面这句实际上是个方法论级别的,真实中,还是没办法判断什么时候要进行重构,于是换成:当代码中出现了坏味道时需要重构什么是坏味道:存在重复代码时函数体太长函数参数太长无法直观的看出代码逻辑类太大对一个常量存在了多个副本很多很多的i 阅读全文
posted @ 2014-04-10 03:13 McKay 阅读(3723) 评论(0) 推荐(3) 编辑
摘要:我们来打造一个简单的专用于json调用的mvc实现,最终会将如下的C#代码暴露给js调用(代码在最后面有下载):public class UserController { public static Json GetUser( [HttpQueryString("x_user")] int userId, [HttpQueryString("msg")] ... 阅读全文
posted @ 2014-03-27 08:08 McKay 阅读(2672) 评论(5) 推荐(2) 编辑
摘要:SUMMARY能做什么DEMO原理图应用场景能做什么A2DFramework的事件机制是基于发布订阅模式改进得来的一套API,中间件部分实现了msmq、redis、Supersocket可替换。能够实现较彻底的模块事件传递过程中的解耦,支持分布式环境。由于订阅端采用了消息队列作为转发层,因此也能支持事件量很大的场景。DEMODemo工程下载地址(可右键保存):发布订阅Demo.rar一、建立各个工程,并且加入A2DFramework.EventService的引用二、给各个工程加入A2D基本代码,如下:A2DFramework.Starter.Init();A2DFramework.Queue 阅读全文
posted @ 2014-03-18 21:39 McKay 阅读(1951) 评论(4) 推荐(2) 编辑
摘要:最近发现windows集群能进行很多自定义,比如在集群中加入自己编写的服务。能自定义的可不少,截个图:本次演示中,只想用“通用服务”这个类型。先列下步骤编写一个记录时间的Windows服务,这个服务会每隔1秒钟写入本地文件当前时间在两台加入了windows集群的服务器中分别安装这个服务(安装即可,不用启动)在windows集群中配置一个新服务,也就是上面这个服务进行故障转移试验编写一个记录时间的Windows服务,这个服务会每隔1秒钟写入本地文件当前时间这个的代码略,没啥可说的,把安装服务、卸载服务的cmd列下面了(InstallUtil.exe需要根据情况从相应的.net framework 阅读全文
posted @ 2014-02-27 16:45 McKay 阅读(4483) 评论(2) 推荐(2) 编辑
摘要:WCF,很好,却又麻烦,很多时候不想用WCF的原因就是:用这个真麻烦...麻烦的地方,比如:一堆一堆的服务配置,散落在一个一个的folder下,更新系统时容易出错客户端除了要知道WCF Contract外,还要知道服务Provider所在位置所以想了个办法来简化这些,主要思路是:加入Internal Communication Service,简称ICS。用来插入自定义的中间层编写一个Service Locator Service,用来将WCF服务提供者信息抽取统一保存,如:url, endpoint类型,做到wcf服务提供者位置无关性完成后,WCF客户端(包括WCF服务内部调用了其他WCF服 阅读全文
posted @ 2014-02-13 13:55 McKay 阅读(2544) 评论(2) 推荐(4) 编辑
摘要:Until recently, when I write ajax call, always write like below:$.ajax({ type: "post", datatype: "json", url: "someurl", success: function (data) { //some logic }});and repeat everywhere... Until some day: ... 阅读全文
posted @ 2014-01-17 13:43 McKay 阅读(620) 评论(0) 推荐(0) 编辑
摘要:js中的嵌套函数用的很多,很牛叉,那为何要平面化?易懂(自己及他人)易修改(自己及他人)平时Ajax调用写法(基于jQuery)$.post('url', jsonObj, function (data) { if(data) { var tips = $.ligerDialog.tip({ title: 'Tip', content: 'Operation successful!' }); ... 阅读全文
posted @ 2014-01-14 11:31 McKay 阅读(6896) 评论(2) 推荐(2) 编辑
摘要:一致性环Hash算法有一个大用处就是解决Memcache服务器down机问题的。目的是增加或者移除Memcache服务器后,最大限度的减少所受影响。理论方面的就不介绍了,网上有太多资料了,请大家自己搜索搜索。在此写了一个ConsistencyRing类来实现算法,具体代码在此下载。测试类如下:public static void Test() { { ConsistencyRing cr = new ConsistencyRing(); Console.WriteLine("============... 阅读全文
posted @ 2013-12-17 23:57 McKay 阅读(2680) 评论(6) 推荐(4) 编辑
摘要:考虑到sql server以及c#,最多只能用decimal类型,也就是29位的数字,做了下面这个数字型id生成器:class Program { static void Main(string[] args) { int i = 100000; Timing t = new Timing(); t.Start(); while(i-->0) UniqueIdGenerator.Next(); t.Stop(); ... 阅读全文
posted @ 2013-12-06 17:05 McKay 阅读(2253) 评论(2) 推荐(0) 编辑