随笔分类 - [20]DesignAnalysis设计分析
-
Microsoft Feature Management – Feature Flags in ASP.NET Core C# – Detailed Guide
摘要:In this article, we will learn about what are feature flags their use along with benefits and how to use these feature flags in the ASP.NET Core appli 阅读全文
-
百万级数据excel导出功能如何实现
摘要:百万级数据excel导出功能如何实现? 前言 最近我做过一个MySQL百万级别数据的excel导出功能,已经正常上线使用了。 这个功能挺有意思的,里面需要注意的细节还真不少,现在拿出来跟大家分享一下,希望对你会有所帮助。 原始需求:用户在UI界面上点击全部导出按钮,就能导出所有商品数据。 咋一看,这 阅读全文
-
HTTP接口风格就俩:RPC和RESTFul
摘要:基于.NetCore开发博客项目 StarBlog - (21) 开始开发RESTFul接口 前言 最近电脑坏了,开源项目的进度也受到一些影响 这篇酝酿很久了,作为本系列第二部分(API接口开发)的第一篇,得想一个好的开头,想着想着就鸽了好久,索性不扯那么多了,直接开写吧~ 关于RESTFul 网上 阅读全文
-
优雅的API接口
摘要:优雅的API接口 瞧瞧别人家的API接口,那叫一个优雅 前言 在实际工作中,我们需要经常跟第三方平台打交道,可能会对接第三方平台API接口,或者提供API接口给第三方平台调用。 那么问题来了,如果设计一个优雅的API接口,能够满足:安全性、可重复调用、稳定性、好定位问题等多方面需求? 今天跟大家一起 阅读全文
-
防止用户重复提交订单
摘要:如何防止用户重复提交订单? 一、摘要 对于投入运营的软件系统,最近小编在巡检项目数据库的时候,发现某些表存在不少的重复数据,对于这样的脏数据,初步分析大致的来源有以下可能: 1.由于用户误操作,多次点击表单提交按钮 2.由于网速等原因造成页面卡顿,用户重复刷新提交页面 3.黑客或恶意用户使用 pos 阅读全文
-
抽象
摘要:基于接口而非实现编程 抽象类和接口的区别 在面向对象编程当中,抽象类和接口是为抽象而生而的两个概念,在初学时特别容易搞混它们俩。 Java 既支持接口,也支持抽象类,这里主要拿 Java 的接口和抽象类做比较。简单地在 Java 中定义这两个概念就是,抽象类是包含抽象方法的类,接口是对行为的抽象。 阅读全文
-
什么是粘包和半包?怎么解决?
摘要:什么是粘包和半包?怎么解决? 粘包和半包问题是数据传输中比较常见的问题,所谓的粘包问题是指数据在传输时,在一条消息中读取到了另一条消息的部分数据,这种现象就叫做粘包。 比如发送了两条消息,分别为“ABC”和“DEF”,那么正常情况下接收端也应该收到两条消息“ABC”和“DEF”,但接收端却收到的是“ 阅读全文
-
.NET遗留应用改造
摘要:浅议.NET遗留应用改造 浅议.NET遗留应用改造 TLDR:本文介绍了遗留应用改造中的一些常见问题,并对改造所能开展的目标、原则、策略进行了概述。 一、背景概述 1、概述 或许仅“遗留应用”这个标题就比较吸睛,因为我听过太多人吐槽了。Robert Martin在《修改代码的艺术》这本书中做的一个比 阅读全文
-
悲观锁、乐观锁、状态码作用于update操作来实现幂等,而唯一索引是针对insertl操作来保证幂等
摘要:接口的幂等性如何设计? 前言 所谓幂等: 多次调用方法或者接口不会改变业务状态,可以保证重复调用的结果和单次调用的结果一致。 我们在开发中主要操作也就是CURD,其中读取操作和删除操作是天然幂等的,我们所关心的就是创建操作、更新操作。 创建操作一定是非幂等的因为要涉及到新数据的产生,而更新操作有可能 阅读全文
-
支持数百万用户的系统
摘要:总结 构建一个健壮的架构系统,其实是一个迭代的过程,为了支持数百万的用户的架构,我们需要做到以下几点: 保证 Web 层无状态 尽可能的缓存数据 异地多活,配置多个数据中心 使用分片扩展数据库 监控系统并使用自动化工具 【系统设计】设计一个支持百万用户的系统 设计一个支持数百万用户的系统是非常有挑战 阅读全文
-
负负得正
摘要:系统设计的11个考虑 有了《系统架构的11条原则》,真正到设计阶段还有另外11个考虑。 系统正确性 考虑一:负负得正 假如我们看到某个代码,明显有逻辑错误,想随手改改。你就要考虑一件事情:这段明显有问题的代码为什么在线上运行着没有人来报bug?有一种正常运行叫做【负负得正】。如果把错误的逻辑改对了反 阅读全文
-
Saga是什么? 分布式事务的挑战
摘要:领域驱动模型DDD(三)——使用Saga管理事务 前言 虽然一直说想写一篇关于Saga模式,在多次尝试后不得不承认这玩意儿的仿制代码真不是我一个菜鸟就能完成的,所以还是妥协般地引用现成的Eventuate Tram Saga框架(虽然我对它一直很反感)和Seata的Saga模式。有一说一,我极其不愿 阅读全文
-
分布式事务的设计
摘要:分布式事务的设计 公司有一项储值卡充值业务:客户在微信公众号开通储值卡服务,通过微信支付往卡里面充值,充值成功后客户可收到消息通知,并进行消费。 看起来是一项很简单的业务,最初我们储值卡团队的实现也确实很简单。我们看看最初的实现: 相信聪明的你一眼就能看出问题: 压根没有考虑分布式事务一致性,比如第 阅读全文
-
接口设计的一般性问题
摘要:接口设计的那些事 接口的一般性问题 很多程序员开发接口的时候,往往仅关注功能实现,但决定接口质量的恰恰是非功能性方面——遗憾的是,这一点在很多公司,从项目到产品到研发,甚至到测试,都未得到应有的重视。 接口的非功能性要素主要体现在如下几个方面: 幂等性; 鲁棒性; 安全性; 幂等性 如果某一天你在超 阅读全文
-
系统开发流程中的三模型、软件设计中的三模型和三个服务
摘要:系统开发流程中的三模型、软件设计中的三模型和三个服务 软件设计过程中主要包含三类服务:领域服务、应用服务和数据服务,具体如下图所示。 一、应用服务 如果您学习过软件工程这本书,会发现在讨论设计相关的知识的时总是提一个词“控制类”。遥想当年,我在上这门课的时候对好多的词都不懂,比如“数据字典”、“控制 阅读全文
-
为什么需要线程池?什么是池化技术?
摘要:在 Java 语言中,提高程序的执行效率有两种实现方法,一个是使用线程、另一个是使用线程池。而在生产环境下,我们通常会采用后者。为什么会这样呢?今天我们就来聊聊线程池的优点,以及池化技术及其应用。 1.池化技术 池化技术指的是提前准备一些资源,在需要时可以重复使用这些预先准备的资源。池化技术的优点主 阅读全文
-
JWT 验证
摘要:干掉Session?这个跨域认证解决方案真的优雅! 用户登录认证是 Web 应用中非常常见的一个业务,一般的流程是这样的: 客户端向服务器端发送用户名和密码 服务器端验证通过后,在当前会话(session)中保存相关数据,比如说登录时间、登录 IP 等。 服务器端向客户端返回一个 session_i 阅读全文
-
分布式系统
摘要:分布式系统中的一些问题 一. CAP理论,BASE理论? CAP: C:强一致性,保证每一节点(微服务)统一时间点数据的完全一致 A:可用性,整个系统是一直可用的,而且是正常响应时间。不允许出现用户访问失败的情况 P:分区容错性,某一个节点或者网络分区发生故障时,整个系统还是可用的,对于用户来说没有 阅读全文
-
事件协调器(saga)
摘要:一、整体流程 首先我们通过一个讲的比较烂的业务模型(库存-余额-订单)来简述一下saga是如何实现分布式事务的。然后再讲解一下saga实现这套流程都做了哪些工作来让大家对分布式事务有一个清晰的认知。首先来讲一下为什么要实现一个分布式事务。当我们的应用通过业务拆解后以物理隔离的模式运行在不同的物理机/ 阅读全文
-
设计消息总线(对消息队列进行二次封装)
摘要:基于ASP.NET Core 5.0使用RabbitMQ消息队列实现事件总线(EventBus) 文章阅读请前先参考看一下 https://www.cnblogs.com/hudean/p/13858285.html 安装RabbitMQ消息队列软件与了解C#中如何使用RabbitMQ 和 http 阅读全文