自由技艺
资深AI算法和C++软件工程师,专注于下一代分布式AI系统,曾就职于华为、百度,北邮土著博士
请关注知乎同名账号
展开
-
详解三大编译器:gcc、llvm 和 clang
编译器一般构成传统的编译器通常分为三个部分,前端(frontEnd),优化器(Optimizer)和后端(backEnd)。在编译过程中,前端主要负责词法和语法分析,将源代码转化为抽象语法树;优化器则是在前端的基础上,对得到的中间代码进行优化,使代码更加高效;后端则是将已经优化的中间代码转化为针对各自平台的机器代码。GCCGCC(GNU Compiler Collection,GNU 编译器套装),是一套由 GNU 开发的编程语言编译器。GCC 原名为 GNU C 语言编译器,因为它原本只能处理 C语原创 2022-04-01 01:06:32 · 2422 阅读 · 0 评论 -
分布式技术 3:高并发系统的设计思路以及C++ 实现
Hello,大家好,欢迎来到“自由技艺“的学习小馆。今天我们来聊一聊软件系统中的高并发,具体内容包括高并发的设计思路、高并发的关键技术以及高并发实践。本文内容信息量比较大,涉及负载均衡、缓存、流控等技术,还有部分 C++ 代码实现,需要读者慢慢消化。1 什么是高并发“并发”一词最早来源于操作系统领域,指一段时间内多任务交替执行的现象。后来,高并发用来指大流量、大规模业务请求的场景,比如春运抢票、电商“双十一”抢购,秒杀促销等。高并发的衡量指标主要有两个:一是系统吞吐率,比如 QPS(每秒查询率)、TP原创 2022-03-29 18:44:20 · 3818 阅读 · 1 评论 -
分布式技术 2:详解 Paxos 共识算法原理
1 问题来源在我们学习一项新技术之前,首先要了解的是这个技术为何而出现,也就是说它是为了解决什么问题。2013年图灵奖获得者 Leslie Lamport 为了解决分布式系统中的一致性问题,抽象出来了一个例子,这个例子就是著名的“拜占庭将军问题”。拜占庭帝国国土辽阔,每支军队的驻地相隔很远,将军们只能靠信使传递消息。发生战争时将军们必须制订统一的行动计划。然而,这些将军中有叛徒,叛徒们篡改行动计划并传播虚假消息。因此,将军们必须提前制订一个预案,使所有忠诚的将军能够达成一致。即使存在少数几个叛徒也不能使原创 2022-03-29 18:41:13 · 7703 阅读 · 0 评论 -
分布式技术 1:一致性哈希原理及 C++ 实现
今天我们来介绍下分布式技术中的一致性哈希的原理及 C++ 代码实现。1 问题来源有这样一个场景:现在有超大规模的数据集(对象),请问如何把它们存储在有限的存储节点上?这里的存储节点可以是某台服务器或者某个 vm(虚拟机)等。首先,肯定是要采取哈希存储的,否则无法高效查找。那使用简单的哈希函数,比如 hash(对象)% 存储节点总个数,可行吗?答案是不行,因为如果添加新的存储节点或者删除某个存储节点,那么很多原有的数据就无法找到了。于是麻省理工学院在 1997 年提出了一种分布式哈希(DHT)实现算法。原创 2022-03-29 18:36:12 · 953 阅读 · 0 评论 -
软件架构设计之如何编排复杂多任务
0、前言软件系统一般由一些基础模块组成,每个模块负责一项具体的功能。软件系统运行时,就是按照一定的规则运行不同的模块,模块之间的执行顺序多种多样,比如串行、并行、条件判断、以及复杂逻辑树。对于一个小的软件,这些执行逻辑可以直接在代码中写死,但对于一个超大型的软件系统,必须引入『编排机制』来定义这些执行逻辑。1、串行串行任务的处理很简单,能够直接像平常同样编写代码:Func1(); // Action1 的执行逻辑Func2(); // Action2 的执行逻辑2、并发Actio原创 2022-03-29 18:29:31 · 1140 阅读 · 0 评论 -
架构文章
http://3ms.huawei.com/hi/group/2692001/blog_9624507.html原创 2021-02-21 22:38:39 · 119 阅读 · 0 评论 -
Kubernetes(k8s)基础:Pod的详细介绍
Pod是什么Pod是Kubernetes中能够创建和部署的最小单元,是Kubernetes集群中的一个应用实例,总是部署在同一个节点Node上。Pod中包含了一个或多个容器,还包括了存储、网络等各个容器共享的资源。Pod支持多种容器环境,Docker则是最流行的容器环境。单容器Pod,最常见的应用方式。多容器Pod,对于多容器Pod,Kubernetes会保证所有的容器都在同一台物理主机或虚拟主机中运行。多容器Pod是相对高阶的使用方式,除非应用耦合特别严重,一般不推荐使用这种方式。一个Pod内的容原创 2020-07-18 15:42:09 · 545 阅读 · 1 评论 -
网站搭建的技术细节
nginx 相对 apache 的优点:轻量级,同样起web 服务,比apache 占用更少的内存及资源抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能高度模块化的设计,编写模块相对简单社区活跃,各种高性能模块出品迅速啊apache 相对nginx 的优点:rewrite ,比nginx 的rewrite 强大模块超多,基本想到的都可以找到少bug ,nginx 的bug 相对较多超稳定Apache与Tomcat的比较相同点:..原创 2020-07-03 17:53:19 · 393 阅读 · 0 评论 -
什么是TPS、QPS?
一、TPS:Transactions Per Second(每秒传输的事物处理个数),即服务器每秒处理的事务数。TPS包括一条消息入和一条消息出,加上一次用户数据库访问。(业务TPS = CAPS × 每个呼叫平均TPS)TPS是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。一般的,评价系统性能均以每秒钟完成的技术交易的数量来衡量。系统整体处理能力取决于处理能力最低模块的原创 2020-06-24 11:42:24 · 498 阅读 · 0 评论 -
RPC框架详解
Remote Processure Call对应于本地函数调用远程过程调用带来的新问题在远程调用时,我们需要执行的函数体是在远程的机器上的,也就是说,Multiply是在另一个进程中执行的。这就带来了几个新问题:1. Call ID映射。我们怎么告诉远程机器我们要调用Multiply,而不是Add或者FooBar呢?在本地调用中,函数体是直接通过函数指针来指定的,我们调用Multiply,编译器就自动帮我们调用它相应的函数指针。但是在远程调用中,函数指针是不行的,因为两个进程的地址空间是完全不一样原创 2020-06-24 11:20:09 · 354 阅读 · 0 评论 -
原子操作和锁
一、原子操作不可被中断的一个或一系列操作。二、处理器如何实现原子操作32位处理器使用基于对缓存加锁或总线加锁的方式来实现多处理器之间的原子操作(1)总线锁:使用处理器提供一个LOCK#信号,当一个处理器在总线上输出此信号的时候,其他处理器的请求将被阻塞,那么该处理器可以独占使用共享内存。举例:i=7,i++;两个线程对i++进行操作,那我们最终期望的结果是9,但最终的结果可能是8,那么想要保证读改写共享变量的操作是原子操作的,就使用总线锁,就是说cpu1读改写共享变量的时候,CPU2不能操作缓存了该原创 2020-06-20 17:33:26 · 2702 阅读 · 0 评论 -
如何设计高并发商城秒杀系统?
秒杀/抢购技术特点读多写少缓存高并发限流负载均衡缓存异步队列资源冲突原子操作异步原子操作和异步又分为:数据库锁(乐观锁、悲观锁)、分布式锁(redis)、其他原子操作(redis、decr)...原创 2020-06-20 17:25:57 · 409 阅读 · 0 评论 -
最值得读的C++开源项目
https://www.zhihu.com/question/21376384/answer/29689529原创 2020-06-20 16:51:57 · 402 阅读 · 0 评论 -
微服务
所有的微服务都是独立的java进程跑在独立的虚拟机上。服务之间的通信一般有两种:一、同步调用(RESTful 和 RPC);二、异步消息(Kafka、Notify)服务发现:基本都是通过zookeeper等类似技术做服务注册信息的分布式管理。当服务上线时,服务提供者将自己的服务信息注册到zk(或类似框架),并通过心跳维持长连接,实时更新连接消息。服务调用者通过zk寻址,根据可定制算法,找到一...原创 2020-04-13 15:06:30 · 130 阅读 · 0 评论