随笔分类 -  [04]系统设计

实际项目中的系统设计,架构,实现。
摘要:介绍 在分布式系统、微服务架构大行其道的今天,服务间互相调用出现失败已经成为常态。如何处理异常,如何保证数据一致性,成为微服务设计过程中,绕不开的一个难题。 在不同的业务场景下,解决方案会有所差异,常见的方式有: 阻塞式重试; 2PC、3PC 传统事务; 使用队列,后台异步处理; TCC 补偿事务; 阅读全文
posted @ 2020-10-09 20:17 蘑菇先生 阅读(1543) 评论(0) 推荐(0) 编辑
摘要:阅读目录: 浅谈C#网络编程系列 探索C#系列 Redis系列 缓存设计系列 Net作业调度系列 多线程锁系列 日志系统及SOA系列 按日期从新到旧及其他 Golang系列 Go中http超时问题的排查 Go中链路层套接字的实践 Go中原始套接字的深度实践 Go中string转[]byte的陷阱 探 阅读全文
posted @ 2015-09-30 20:00 蘑菇先生 阅读(4784) 评论(6) 推荐(10) 编辑
摘要:比如有些数据需要通过日期范围查询,这是个很常见的场景。 使用Sorted Sets当存储的数据结构,添加key时把日期进行简单的转码。 一年有365天,在score中预留三位来存储天份,通过DayOfYear计算出一年第多少天: 阅读全文
posted @ 2015-07-20 08:30 蘑菇先生 阅读(23636) 评论(2) 推荐(4) 编辑
摘要:阅读目录:介绍进程缓存通信方式速度对比总结介绍之前有童鞋问到关于首次为空的问题,这里简单补充下:一般来说并发量小、缓存数据量小的网站让用户自行触发页面让其缓存即可。大点网站都会多台部署,用负载均衡路由。常见的策略是在每台机器发布应用时,节点从负载均衡节点集合中移除,发布结束后,首次访问通过人工或自动... 阅读全文
posted @ 2015-07-13 08:33 蘑菇先生 阅读(5959) 评论(11) 推荐(18) 编辑
摘要:阅读目录:基本介绍使用配置部署实例面板属性基本介绍Opserver是Stack Exchange的一个开源监控系统,基于Net、MVC开发,所以Net程序员可以轻松基于它二次开发。它主要监控:serversSQL clusters/instancesrediselastic searchexcept... 阅读全文
posted @ 2015-06-30 20:12 蘑菇先生 阅读(10130) 评论(13) 推荐(11) 编辑
摘要:关于Redis高可用方案,看到较多的是keepalived、zookeeper方案。 keepalived是主备模式,意味着总有一台浪费着。zookeeper工作量成本偏高。 本文主要介绍下使用官方sentinel做redis高可用方案的设计。阅读目录:Redis Sentinel故障转移消息接收的... 阅读全文
posted @ 2015-05-25 08:33 蘑菇先生 阅读(18386) 评论(4) 推荐(14) 编辑
摘要:阅读目录发布订阅模型 Redis中的发布订阅客户端编程示例0.3版本Hredis发布订阅模型在应用级其作用是为了减少依赖关系,通常也叫观察者模式。主要是把耦合点单独抽离出来作为第三方,隔离易变化的发送方和接收方。发送方:只负责向第三方发送消息。(杂志社把读者杂志交给邮局)接收方:被动接收消息。(1:... 阅读全文
posted @ 2015-04-30 22:11 蘑菇先生 阅读(32529) 评论(10) 推荐(5) 编辑
摘要:接上篇c#实现redis客户端(一),重新整理些了下。阅读目录:项目说明Hredis设计图单元测试场景总结项目说明背景:因为有地方要用,而又没找到对sentinel良好支持的Net客户端,所以就简单重写了个。目标:尽可能的简单,轻量级,不进行过度的封装,使用方便。代码说明: 1. 与Redis... 阅读全文
posted @ 2015-04-18 08:02 蘑菇先生 阅读(6707) 评论(8) 推荐(13) 编辑
摘要:阅读目录: 现有系统 新架构 2.1 逻辑架构图 2.2 解释说明 系统实施 3.1 SOA管理中心 3.2 发布服务 3.3 订阅服务 3.4 采蘑菇示例 设计目标 4.1 尽可能少的侵入 4.2 服务自治&&水平扩展 4.3 系统升级降级 常见问题 5.1 ClientApi VS ServiceApi 5.2 聚合服务 5.3 服务分级 总结心得 阅读全文
posted @ 2015-02-24 11:42 蘑菇先生 阅读(30237) 评论(68) 推荐(79) 编辑
摘要:感谢园子里的同学对上一篇的支持,很高兴楼主的一些经验及想法能够对大家有一些帮助。上次主要讨论缓存读写这块各种代码实现,本篇就上次的问题继续来,看看那些年折腾过的各种缓存做法。阅读目录:缓存预热多级缓存线程缓存内存缓存文件缓存分布式缓存DB缓存多层缓存总结缓存预热上次有同学问过,在第一次加载时缓存都为... 阅读全文
posted @ 2015-02-01 10:39 蘑菇先生 阅读(12846) 评论(13) 推荐(20) 编辑
摘要:介绍在实际项目使用中quartz.net中,都希望有一个管理界面可以动态添加job,而避免每次都要上线发布。也看到有园子的同学问过。这里就介绍下实现动态添加job的几种方式, 也是二次开发的核心模块。阅读目录:传统方式框架反射方式进程方式URL方式框架配置方式传统方式继承IJob,实现业务逻辑,添加... 阅读全文
posted @ 2015-01-19 08:42 蘑菇先生 阅读(25077) 评论(40) 推荐(27) 编辑
摘要:介绍在实际使用quartz.net中,持久化能保证实例重启后job不丢失、 集群能均衡服务器压力和解决单点问题。quartz.net在这两方面配置都比较简单。持久化quartz.net的持久化,是把job、trigger一些信息存储到数据库里面,以解决内存存储重启丢失。下载sql脚本 htt... 阅读全文
posted @ 2015-01-18 15:17 蘑菇先生 阅读(21391) 评论(25) 推荐(15) 编辑
摘要:介绍在大型系统开发调试中,跨系统之间联调开始变得不好使了。莫名其妙一个错误爆出来了,日志虽然有记录,但到底是哪里出问题了呢? 是Ios端参数传的不对?还是A系统或B系统提供的接口导致?相信有不少人遇到这种情况,大多数问题往往不大,但排查起来比较费劲。下面介绍下怎么通过上下文跟踪的方法,最快定位到其问... 阅读全文
posted @ 2014-12-13 20:16 蘑菇先生 阅读(12723) 评论(15) 推荐(19) 编辑
摘要:介绍这篇距上一篇已经拖3个月之久了,批评自己下。通过上篇介绍了解如何利用mono反射代码,可以拿出编译好的静态数据、例如方法参数信息之类的。但实际情况是往往需要的是运行时的数据,就是用户输入等外界的动态数据。既然是动态的,那就是未知的,怎么通过提前注入的代码获取呢!阅读目录:普通写法注入定义Weav... 阅读全文
posted @ 2014-11-27 08:22 蘑菇先生 阅读(8386) 评论(8) 推荐(11) 编辑
摘要:介绍前面介绍Quartz.Net的基本用法,但在实际应用中,往往有更多的特性需求,比如记录job执行的执行历史,发邮件等。阅读目录Quartz.Net插件TriggerListener,JobListenerCron表达式Quartz.Net线程池总结Quartz.Net插件 Quartz.net... 阅读全文
posted @ 2014-11-17 22:32 蘑菇先生 阅读(12997) 评论(4) 推荐(5) 编辑
摘要:Source Code-1.6M介绍上篇已经了解Quartz.NET的基本使用方法了。但如果想方便的知道某个作业执行情况,需要暂停,启动等操作行为,这时候就需要个Job管理的界面。本文介绍Quartz.NET如何进行远程job管理,如图:实战一:作业服务端 static void Main(stri... 阅读全文
posted @ 2014-11-01 18:21 蘑菇先生 阅读(20112) 评论(29) 推荐(15) 编辑
摘要:背景很多时候,项目需要在不同时刻,执行一个或很多个不同的作业。Windows执行计划这时并不能很好的满足需求了,迫切需要一个更为强大,方便管理,集群部署的作业调度框架。介绍Quartz一个开源的作业调度框架,OpenSymphony的开源项目。Quartz.Net是Quartz的C#移植版本。它一些... 阅读全文
posted @ 2014-11-01 13:14 蘑菇先生 阅读(36829) 评论(11) 推荐(20) 编辑
摘要:背景近期在写日志系统,需要在运行时在函数内注入日志记录,并附带函数信息,这时就想到用Aop注入的方式。AOP分动态注入和静态注入两种注入的方式。动态注入方式利用Remoting的ContextBoundObject或MarshalByRefObject。动态代理(反射),很多AOP框架都用这种方式。... 阅读全文
posted @ 2014-08-24 13:00 蘑菇先生 阅读(9495) 评论(4) 推荐(4) 编辑