
架构
文章平均质量分 52
自驱
ALOHA HEJA HE
展开
-
【一致性】redis+DB一致性如何保证? 从Cache Expiry到Double Delete双重删除
以案例1为例,在更新数据库后不要做任何额外的事情,并立即清理缓存,而在案例3中,从数据库读取数据后,不要做太多的格式转换,并尽快将结果写入缓存。另一方面,案例2可以通过实现优雅的关闭来减少人为发生的几率,但是对于应用程序崩溃却无能为力。另一方面,通过实现 DAL 可以避免弊端问题,但是正确实现 DAL 非常困难,而且需要大量的领域知识才能正确实现,这使得 DAL 的实现更加困难。一般来说,Read ASide 可以实现相对较高的一致性,即使它只是一个简单的实现,但它也可以具有非常好的可靠性。原创 2022-11-10 00:05:52 · 415 阅读 · 0 评论 -
【架构师】解决方案架构师常用的5种类型架构图
这种类型的图表往往是低层次的,因为它包含了比其他图表更多的细节。这些关系图还可以帮助那些刚刚接触某个领域的开发人员,并为他们将要构建的内容提供有洞察力的上下文。使用这个图来描述系统是如何工作的,展示主要应用程序之间的连接,没有什么比服务关系图更适合了。这种类型的图的目标是显示应用程序中的所有内容以及它们是如何连接的。此图的目的是显示已经构建的内容以及系统当前的工作方式。作为解决方案架构师,我们必须能够在向正确的人推销我们的想法时提供正确类型的图表。它是一个中到高层次的图表,显示了工作流的所有部分。原创 2022-11-06 21:30:52 · 2568 阅读 · 0 评论 -
【全栈】vue3.0 + golang + mysql + gorm + jwt 尝试前后端分离【博客系统2.0】发版
整体代码结构(源码:在前面的文章中已经贡献)Api设计,路由部分如下。原创 2022-10-28 22:33:00 · 1266 阅读 · 1 评论 -
【golang】用semaphore 实现一致性 worker pool 【普通版】
【代码】【golang】用semaphore 实现一致性 worker pool 【普通版】原创 2022-10-15 20:36:40 · 265 阅读 · 1 评论 -
【golang】分别用 sync.WaitGroup 和 semaphore 实现 worker pool 【普通版】
【代码】【golang】分别用 sync.WaitGroup 和 semaphore 实现 worker pool 【普通版】原创 2022-10-15 19:57:32 · 343 阅读 · 0 评论 -
【架构】酒店预订应用程序的系统设计架构
这里两个服务,一个是搜索酒店和预订服务,预订酒店和预订服务也将与第三方服务的支付服务Payment Service交互。Redis 是一个缓存系统,它存储临时数据,这样数据就不需要查询数据库,最终可以减少数据库中的负载Load,同时也减少了 API 的响应时间。它最初由Facebook开发,用于改善电子邮件系统的搜索性能的简单格式数据,集Google BigTable的数据模型与Amazon Dynamo的完全分布式架构于一身(NoSQL 数据库,擅长处理大量数据)。像业务分析,寻找潜在客户,受众分类等。原创 2022-09-29 10:19:45 · 1671 阅读 · 0 评论 -
【全栈】vue3.0 + golang 尝试前后端分离【博客系统1.1】部署
我只有一个物理机(一年360多好像,配置不高2C1G),一个域名https://ddyydy.tk, 如何go backend 和 vue frontend 项目一起使用呢?想参考源码的同学,请留言...原创 2022-09-18 23:08:44 · 1672 阅读 · 2 评论 -
【设计模式】现代架构设计模式:断路器,CQRS,事件来源,Sidecar边车,BFF和Strangler
注意: 如果您使用的是 API 网关,那么 BFF 模式可以很容易地在网关本身中实现,并且您不需要维护单独的服务。上图展示了电路断路器模式的实现,当服务1在调用服务2时存在连续的故障/超时时,服务1不再重试,而是跳过对服务2的调用并返回回退响应(当然也可以实现百分比按照百分比回退)。注意:当断路由打开时,需要有足够的日志记录和警报实现是非常关键的,以便跟踪在此期间收到的请求,并且开发团队知道这一点。的系统,这些系统需要维护事件的审计和历史记录ーー例如,像酒店/会议/座位预订这样的应用程序。原创 2022-08-25 09:12:59 · 531 阅读 · 0 评论 -
【golang】why 消费者定义接口,生产者返回实体struct?
消费者负责定义接口,即消费者所依赖的是一个接口;消费者定义如下://user.go// 第一对外所依赖的接口}}store: s,}}//db.gopackage db// 生产者实现消费者所需的接口依赖,注意该生产者可以供给多个消费者使用,实现所有消费者所需要的方法;}消费者 user.go 需要存储依赖才能执行与用户相关的业务逻辑。它不关心存储是什么,只是它有 2 个方法,Insert() 和 Get(),因此它能够创建和检索用户。...原创 2022-08-14 11:05:41 · 302 阅读 · 2 评论 -
【go】依赖注入
依赖注入是一种设计模式,可帮助您解耦实现的外部逻辑。实现需要外部 API 或数据库等是很常见的。知道这些东西不是实现的责任,它应该接收其依赖项并根据需要使用它们。假设您有一个具有以下依赖项的实现。你可以创建依赖项并将它们设置到您的服务/用例中。但这对于测试尤其不利,如果想更改依赖服务的实现比如数据库,比如如果您唯一的选择是编写集成测试而不是单元测试。实现方式如下依赖倒置原则。它允许您轻松切换某些依赖项的实现,并且您可以更改模拟实现的真实实现。它是单元测试的基础。...原创 2022-08-07 21:39:38 · 1272 阅读 · 0 评论 -
【一致性hash】负载均衡器分发请求
使用散列函数,我们可以获得一个输出值,之后我们应用模函数来获得与负载均衡器应该将请求定向到的服务器相对应的数字。映射到索引 88 的请求现在由映射到索引 95 的新服务器提供服务,而不是之前映射到索引 99 的服务器。类似地,如果一个服务器被移除,下一个服务器的邻居将接管负载,其他服务器不会受到影响。因此,如果具有特定 IP 地址的用户将被路由到不同的服务器,则需要使之前服务器上的缓存失效。但是,如果我们决定添加一个额外的服务器,我们将得到一个值 (88 % 6),这反过来将请求重定向到服务器 4。...原创 2022-08-05 08:40:41 · 276 阅读 · 0 评论 -
【side car】 tcp 平滑升级流程图
未命名文件 | ProcessOn免费在线作图,在线流程图,在线思维导图 |原创 2021-11-22 08:36:02 · 1720 阅读 · 0 评论 -
golang TestMain 介绍
https://books.studygolang.com/The-Golang-Standard-Library-by-Example/chapter09/09.5.html原创 2021-11-02 18:28:10 · 592 阅读 · 0 评论 -
redis 3.0 server初始化PONG -- Mac 系统函数 memcpy 定义
#include <string.h> // /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/secure/_string.h#define memcpy(dest, ...) \ __builtin___memcpy_chk (dest, __VA_ARGS__, __darwin_obsz0 (dest))#endif参考: redis 3.0 server初始化src..原创 2021-10-26 12:08:13 · 293 阅读 · 0 评论 -
点赞过3万的docker视频教程
https://www.youtube.com/watch?v=fqMOX6JJhGo原创 2021-10-13 18:25:20 · 201 阅读 · 0 评论 -
良好的可操作性性:DB系统设计
原创 2021-10-11 14:08:13 · 212 阅读 · 0 评论 -
怎么描述系统性能---正确姿势
原创 2021-10-08 21:05:20 · 763 阅读 · 0 评论 -
分布式事务小结
保证分布式系统数据一致性的6种方案 - 云+社区 - 腾讯云原创 2021-09-29 15:58:04 · 82 阅读 · 0 评论 -
epoll linux 源码github
https://github.com/torvalds/linux/blob/master/fs/eventpoll.c#L1769原创 2021-09-26 18:24:16 · 191 阅读 · 0 评论 -
golang syscall 系统调用认知
1 本文整体结构C语言中syscall如何使用? golang中如何使用? syscall 手册 2 C语言中syscall如何使用? #define _GNU_SOURCE #include <unistd.h> #include <sys/syscall.h> #include <sys/types.h> #include <signal.h> ...原创 2021-09-24 11:58:42 · 1561 阅读 · 0 评论 -
流量调度的关键技术(API网关全景图)
MegaEase原创 2021-09-15 15:46:30 · 290 阅读 · 0 评论 -
iterative-->forking-->preforked--->threaded 服务架构性能对比
原创 2021-09-10 12:24:58 · 88 阅读 · 0 评论 -
C --- wait(NULL) 作用?
Well, sorry, that much is obvious. What you want to know is, probably, what it waits for. The answer is: the termination of a child process. //答案是:终止一个子进程When you create a new child process withfork(), you have no control over when it will be executed ..原创 2021-09-09 16:23:05 · 4100 阅读 · 0 评论 -
The Thundering Herd accept system call
原创 2021-09-09 10:36:15 · 97 阅读 · 0 评论 -
C ---- http server frok 系统调用实现
#define _GNU_SOURCE /* For asprintf() */#include <stdio.h>#include <unistd.h>#include <fcntl.h>#include <string.h>#include <sys/stat.h>#include <stdlib.h>#include <ctype.h>#include <strings.h>#inclu.原创 2021-09-08 11:17:20 · 185 阅读 · 0 评论 -
C语言读取redis lrange 实现
/* * Get the range of items in a list from 'start' to 'end'. * This function allocates memory. An array of pointers and all the strings pointed to by it * are dynamically allocated. redis_free_array_results() has to be called to free this * allocated..原创 2021-09-06 21:58:13 · 215 阅读 · 0 评论 -
kafka小结
Kafka 是什么?主要应用场景有哪些?Kafka 是一个分布式流式处理平台。这到底是什么意思呢?流平台具有三个关键功能:消息队列:发布和订阅消息流,这个功能类似于消息队列,这也是 Kafka 也被归类为消息队列的原因。 容错的持久方式存储记录消息流: Kafka 会把消息持久化到磁盘,有效避免了消息丢失的风险·。 流式处理平台:在消息发布的时候进行处理,Kafka 提供了一个完整的流式处理类库。Kafka 主要有两大应用场景:消息队列:建立实时流数据管道,以可靠地在系统或应用...原创 2021-09-05 10:31:25 · 265 阅读 · 0 评论 -
C---http server 实现
#define _GNU_SOURCE /* For asprintf() */#include <stdio.h>#include <unistd.h>#include <fcntl.h>#include <string.h>#include <sys/stat.h>#include <stdlib.h>#include <ctype.h>#include <strings.h>#inclu.原创 2021-09-04 09:36:40 · 589 阅读 · 0 评论 -
如何架构一个可扩展的高性能的网站
Concurrent Programming for Scalable Web Architectures ,这是一本在线的免费书,谈到了一些不错的设计方法和知识。http://berb.github.io/diploma-thesis/community/index.html原创 2021-09-02 10:17:12 · 62 阅读 · 0 评论 -
Instagram 工程的3条规则: 可扩展的云应用架构
Instagram Engineering’s 3 rules to a scalable cloud application architectureInstagram 工程的3条规则: 可扩展的云应用架构DataStaxJul 13, 2016·4 min read2016年7月13日A timeline of Instagram scale图片分享的时间轴3.5 billion...翻译 2021-09-02 10:08:43 · 401 阅读 · 0 评论 -
【面试】朋友面试--被问API 网关?
为什么要网关?你知道有哪些常见的网关系统? 如何设计一个亿级网关(API Gateway)?网关主要用于请求转发、安全认证、协议转换、容灾。原创 2021-08-28 22:18:34 · 104 阅读 · 0 评论 -
【面试】朋友面试--被问ThreadLocal?
对于ThreadLocal,大家的第一反应可能是很简单呀,线程的变量副本,每个线程隔离。那这里有几个问题大家可以思考一下:ThreadLocal的 key 是弱引用,那么在ThreadLocal.get()的时候,发生GC之后,key 是否为null? ThreadLocal中ThreadLocalMap的数据结构? ThreadLocalMap的Hash 算法? ThreadLocalMap中Hash 冲突如何解决? ThreadLocalMap的扩容机制? ThreadLoca...原创 2021-08-28 22:12:38 · 195 阅读 · 0 评论 -
【面试】朋友面试--被问分库分表?
1 读写分离&分库分表读写分离主要是为了将数据库的读和写操作分不到不同的数据库节点上。主服务器负责写,从服务器负责读。另外,一主一从或者一主多从都可以。读写分离可以大幅提高读性能,小幅提高写的性能。因此,读写分离更适合单机并发读请求比较多的场景。分库分表是为了解决由于库、表数据量过大,而导致数据库性能持续下降的问题。常见的分库分表工具有:sharding-jdbc(当当)、TSharding(蘑菇街)、MyCAT(基于 Cobar)、Cobar(阿里巴巴)...。 推荐使用...原创 2021-08-28 21:43:07 · 182 阅读 · 0 评论 -
【面试】朋友面试--被问mybatis?
1、#{}和${}的区别是什么?注:这道题是面试官面试我同事的。答:${}是 Properties 文件中的变量占位符,它可以用于标签属性值和 sql 内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc.Driver。 #{}是 sql 的参数占位符,MyBatis 会将 sql 中的#{}替换为?号,在 sql 执行前会使用 PreparedStatement 的参数设置方法,按序给 sql 的?号占位符设置参数值,比如 ps.setInt(0...原创 2021-08-28 21:38:36 · 113 阅读 · 0 评论 -
【面试】朋友面试--被问mysql锁怎么理解?
Mysql锁:灵魂七拷问https://tech.youzan.com/seven-questions-about-the-lock-of-mysql/原创 2021-08-28 21:37:14 · 72 阅读 · 0 评论 -
【面试】朋友面试--被问mysql事务理解?
什么是事务?事务是逻辑上的一组操作,要么都执行,要么都不执行。事务最经典也经常被拿出来说例子就是转账了。假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是:将小明的余额减少1000元,将小红的余额增加1000元。万一在这两个操作之间突然出现错误比如银行系统崩溃,导致小明余额减少而小红的余额没有增加,这样就不对了。事务就是保证这两个关键操作要么都成功,要么都要失败。事务的特性(ACID)原子性:事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要...原创 2021-08-28 21:26:34 · 99 阅读 · 0 评论 -
【面试】朋友面试--被问redis怎么使用?
简单介绍一下 Redis 呗!简单来说Redis 就是一个使用 C 语言开发的数据库,不过与传统数据库不同的是Redis 的数据是存在内存中的,也就是它是内存数据库,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向。另外,Redis 除了做缓存之外,也经常用来做分布式锁,甚至是消息队列。Redis 提供了多种数据类型来支持不同的业务场景。Redis 还支持事务 、持久化、Lua 脚本、多种集群方案。分布式缓存常见的技术选型方案有哪些?分布式缓存的话,使用的比较多的主要...原创 2021-08-28 21:18:45 · 510 阅读 · 1 评论 -
SSO 网易实现方案参考
https://ken.io/note/sso-design-implement原创 2021-08-20 14:59:22 · 102 阅读 · 0 评论 -
http-filter -- 透传traceId
1 拦截器public class OkHttpTraceIdInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { String traceId = MDC.get(Constants.TRACE_ID); Request request = null; if (traceId != null) { .原创 2021-08-28 21:22:45 · 398 阅读 · 0 评论 -
Aerospike 安装使用
1 install 1 安装 centos 类似 wget -O aerospike.tgz 'https://www.aerospike.com/download/server/latest/artifact/ubuntu16' tar -xvf aerospike.tgz cd aerospike-server-communityOrEnterprise-aerospikeVersion-ubuntuVersion mv aerospike-serve原创 2021-08-20 07:34:09 · 1210 阅读 · 0 评论