随笔分类 -  可扩展

摘要:后台计划任务设计思路: 日志埋点处理,便于prd排查问题 2种主动job搭配规范(正向job、反查job) 1种消息接收的处理规范,重试机制,返回状态 job开关维度 数据流图 线上暗job-便捷性-工具job 处理流水表的设计 分布式多副本考虑 一一说来 日志埋点处理,便于prd排查问题 prd环 阅读全文
posted @ 2021-05-23 01:15 McKay 阅读(1036) 评论(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 阅读(3601) 评论(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 阅读(17051) 评论(30) 推荐(17) 编辑
摘要:前言系统一大,就会拆分成多个独立的进程,比如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 阅读(6542) 评论(2) 推荐(6) 编辑
摘要:什么是重构?是在不改变系统行为的前提下,对内部代码的重新组织,提高可理解性和降低修改成本。为什么要重构?一个小修改牵涉到了多个地方,且这些点处于未知状态不易读懂代码(包括读懂自己1个月前的代码)新手修改代码上手慢,需要很久才能进行有信心的代码修改需求变化时,代码层面响应慢什么时候需要重构?随时随地的重构,也就是从一开始就进行小范围的重构,就不至于时间久后没法平滑的重构了上面这句实际上是个方法论级别的,真实中,还是没办法判断什么时候要进行重构,于是换成:当代码中出现了坏味道时需要重构什么是坏味道:存在重复代码时函数体太长函数参数太长无法直观的看出代码逻辑类太大对一个常量存在了多个副本很多很多的i 阅读全文
posted @ 2014-04-10 03:13 McKay 阅读(3722) 评论(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) 编辑
摘要:用设计模式、AOP能将一个方法/函数包裹起来,并且插入额外的逻辑行为,不过动作比较大,不是很灵活,下面介绍一种链式调用方法来封装的代码,完成后能实现如下的链式调用:public class BO { public bool Add(string msg) { Console.WriteLine("Add"); if (msg == null) throw new Exception(); return true... 阅读全文
posted @ 2014-03-26 18:05 McKay 阅读(1865) 评论(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 阅读(2540) 评论(2) 推荐(4) 编辑
摘要: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 阅读(6894) 评论(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 阅读(2252) 评论(2) 推荐(0) 编辑
摘要:A2D Framework增加了EF支持,加上原先支持ADO.NET:支持EF方式支持ADO.NET方式这次来讲如何让Entity Framework变成nb的读写分离1. 先设计EF模型, 可以图形方式设计,也可以数据库优先方式设计,总之设计完后,再转换成Code方式使用(用)2. 在DbContext类中,删除EF自动添加的报错代码,如下:protected override void OnModelCreating(DbModelBuilder modelBuilder){ throw new UnintentionalCodeFirstException();//... 阅读全文
posted @ 2013-12-06 15:45 McKay 阅读(4010) 评论(2) 推荐(2) 编辑
摘要:注明:此处所说的日志是指程序错误的日志。一般B/S程序记录日志的方式最多的方式是获取到exception后直接append到一个文本文件,当然也有记录到windows event log的。我们来讨论下当高并发量下的解决办法:有很多解决方式,如下:直接记录为txt/xml文件Windows Event Log当前进程的本地队列MSMQ独立进程中的WCF服务(进程间管道)独立进程中的WCF服务(异步调用方式)数据库Sql server的Service BrokerMongoDB(或者类似的NoSQL数据库)其实大多数情况下使用文本文件或者eventlog就可以了,不过这不在本次讨论范围,去掉。数 阅读全文
posted @ 2013-12-03 21:43 McKay 阅读(5071) 评论(4) 推荐(5) 编辑
摘要:有时在Command和DTO之间层次比较多,写了个验证Command的函数,能实现递归验证.比如下面这些有层级关系的class定义,能通过一句代码来进行验证:class A { [Required] public B B { get; set; } } class B { [Range(10, 20)] public int C { get; set; } [Range(typeof(Guid), "00000000-0000-0000-0000-000000000001", "00000000-00... 阅读全文
posted @ 2013-10-08 17:48 McKay 阅读(1347) 评论(0) 推荐(4) 编辑
摘要:主要的步骤是按照下面的例子来做的:NuGet学习笔记(1)——初识NuGet及快速安装使用NuGet学习笔记(2)——使用图形化界面打包自己的类库NuGet学习笔记(3)——搭建属于自己的NuGet服务器最搞的地方在:Win7 64bit下,总是报.net 4.0 无法写入temorary folder,最后把c:\windows\temp目录加上IIS_IUSR权限才搞定报web.config无法解析错误,用aspnet_regiis -ir搞定NuGet Package Explorer发布后,需要将server的缓存去掉,在vs中才能获取最新的,publish完后,直接打开web.con 阅读全文
posted @ 2013-09-18 02:32 McKay 阅读(3706) 评论(5) 推荐(2) 编辑