摘要: 架构的本质 熵增定律:一个封闭系统,都是从有序到无序,也就是它的熵(即混乱程度)会不断地增加,最终系统会彻底变得无序。 这个理论放在软件系统的演化上,也是非常适用的。一方面,随着业务需求的增加,我们会往系统里不停地添加业务功能;另一方面,随着访问量的不断增加,我们会不断通过技术手段来加强系统非业务性 阅读全文
posted @ 2023-03-27 16:56 唐磊(Jason) 阅读(40) 评论(0) 推荐(0) 编辑
摘要: 关于这个系列 程序=算法+数据结构 掌握了数据结构与算法,你看待问题的深度,解决问题的角度就会完全不一样。因为这样的你,就像是站在巨人的肩膀上,拿着生存利器行走世界。数据结构与算法,会为你的编程之路,甚至人生之路打开一扇通往新世界的大门。 学习算法与数据结构对我们的帮助: 建立时间复杂度、空间复杂度 阅读全文
posted @ 2023-02-14 11:48 唐磊(Jason) 阅读(21) 评论(0) 推荐(0) 编辑
摘要: 拿到一堆数据,去做架构也好,设计也好,可行性分析也好,工程上需要的是严谨。但是也有很多场景,比如即时的问题争辩和讨论,我们往往需要的是快速、直接的估算,这样的数据显然不需要非常精确,甚至可以说它一定会非常粗略,我们的目标往往只停留在 “量级” 的级别,但是我们依然可以对方案有一个具体的、量化的认知, 阅读全文
posted @ 2024-02-26 09:59 唐磊(Jason) 阅读(5) 评论(0) 推荐(0) 编辑
摘要: 一、背景 在具体介绍一致性哈希算法之前,先问一个问题:为什么需要一致性哈希算法?下面我们通过一个案例来回答这个问题。 假设有这么一种场景:我们有三台缓存服务器分别为:node0、node1、node2,有3000万个缓存数据需要存储在这三台服务器组成的集群中,希望可以将这些数据均匀的缓存到三台机器上 阅读全文
posted @ 2024-02-21 14:29 唐磊(Jason) 阅读(9) 评论(0) 推荐(0) 编辑
摘要: 概述 分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求, 阅读全文
posted @ 2022-09-08 19:30 唐磊(Jason) 阅读(365) 评论(0) 推荐(0) 编辑
摘要: 在单体架构中,不同模块之间可以通过项目引用的方式直接使用接口调用,单次请求在同一台机器的同一个进程内进行,这种调用方式称为本地调用,但是在微服务架构中,每个服务都是独立的进程,并且通常部署在不同的服务器,无法简单的使用本地调用的方式,而是需要远程服务调用来实现服务间的通信。 通信模式的划分 目前有很 阅读全文
posted @ 2022-09-05 21:50 唐磊(Jason) 阅读(822) 评论(0) 推荐(0) 编辑
摘要: 在微服务架构中,由于系统的拆分,通常会有很多的服务,而每个服务又可能因为横向扩展而部署在多台服务器上,当服务A需要调用服务B的接口时,服务A该如何知道服务B的主机地址就成了一个问题,如果将B服务地址写死在配置文件中,那么当服务B扩展、下线或主机迁移时,服务A都需要改动配置文件以保证接口的正常调用,如 阅读全文
posted @ 2022-08-26 20:58 唐磊(Jason) 阅读(351) 评论(0) 推荐(0) 编辑
摘要: 在微服务架构中,由于服务之间做了拆分,一次请求往往要涉及多个服务的调用,不同的服务可能由不同的团队开发,使用不同的编程语言,还有可能部署在不同的机器上,分布在不同的数据中心。当请求出现异常问题时,我们需要知道本次请求调用了哪些服务,又是哪个服务引起的错误,如果靠人肉的方式,到每个服务去查找代码,查看 阅读全文
posted @ 2022-08-26 19:14 唐磊(Jason) 阅读(279) 评论(0) 推荐(1) 编辑
摘要: 应用程序可以将数据保存在RAM中做到快速的读写。但是RAM有两个缺点:一是空间过小,无法保存较大型的数据;二是进程结束后,内存中的数据也会被释放,无法做到数据持久化。如果应用有存储大量数据或数据持久化的需求,那么就需要使用磁盘(机械硬盘,光盘,固态硬盘等)。机械硬盘的结构很复杂包括盘片,柱面,磁道, 阅读全文
posted @ 2022-05-10 23:37 唐磊(Jason) 阅读(214) 评论(0) 推荐(0) 编辑
摘要: Redis以高性能著称,不仅其因为采用了单线程,IO多路复用,纯内存读写等等,它还在底层的数据结构实现上用了很大的心思。针对不同的场景采用了不同的数据结构,以提升数据读写效率,降低数据存储空间。 Redis底层使用的六种数据结构 简单动态字符串(SDS) hash表(散列表/字典) 链表 跳表 整型 阅读全文
posted @ 2022-04-25 14:29 唐磊(Jason) 阅读(2562) 评论(0) 推荐(1) 编辑
摘要: 数组是数据结构中最简单,基础的结构,并且也是我们刚接触代码就会学习到的数据结构。那么我们对数组真的足够了解了吗? 定义 数组是一种线性表数据结构,它用一段连续内存空间,来存储一组具有相同类型的数据。 对于上面数组的定义有几个关键点:线性表,连续内存空间,相同类型数据。 线性表,顾名思义,就是数据像一 阅读全文
posted @ 2021-04-09 10:30 唐磊(Jason) 阅读(53) 评论(0) 推荐(0) 编辑
摘要: 我们平时的开发离不开记录日志,.net core框架也内置了强大的日志记录功能。 简单示例 创建一个控制台应用,在appsettings.json中加入如下配置 1 "Logging": { 2 "LogLevel": { 3 "Default": "Debug", 4 "Microsoft": " 阅读全文
posted @ 2021-04-08 19:44 唐磊(Jason) 阅读(303) 评论(0) 推荐(0) 编辑