后端服务
文章平均质量分 85
C/C++后端服务器开发
夏之七
立足小世界,日积跬步;沟通大世界,万川映月。
展开
-
如何在VMWare虚拟机里把DPDK跑起来?
一、环境准备VMware + Ubuntu 16.04 Server版本二、DPDK环境搭建2.1 vmware 添加两块网卡要把DPDK运行起来,需要两块网卡,因此我们需要查看我们的虚拟机是否已经有了两块网卡,如果没有则添加;添加网卡的时候建议把网卡网络连接设置为“桥接模式(B)”。桥接网卡作为 DPDK运行的网卡。NAT网卡作为ssh连接的网卡。2.2 修改网卡配置信息1)找到我们虚拟机上的.vmx文件,并打开文件;2)把ethernet0.virtualDev由e1..原创 2021-09-17 21:53:33 · 3933 阅读 · 0 评论 -
C++内存池设计
一、什么是内存池?为什么要使用内存池?一次性分配好,使用的时候直接调用,对外提供的是API接口,应用软件直接调用API接口就可以获取到需要的内存空间。在做服务端开发的时候都可以使用内存池。频繁的对内存进行malloc/free,会产生内存碎片。不断的malloc和free也会影响性能,因为内存操作需要在用户态和内核态之间不断切换。内存数据也可以用,为什么还要使用内存池?如果是通过消息队列,把数据push到另外一个线程处理业务的时候,定义的数组是用不了的。此时我们就可以使用内存池传递指针过去。..原创 2021-09-16 11:38:44 · 717 阅读 · 0 评论 -
CMake安装教程--Windows
1、CMake下载下载网址:https://cmake.org/download/根据系统下载对应的CMake版本:32位、64位系统选择对应的版本进行下载。比如 ,Windows为64位,则选择下载64位版本CMake。CMake Windows版本提供了两种形式的软件包:msi安装包和压缩zip绿色包。本文选择msi安装包进行安装说明。2、CMake安装(1)安装步骤如下图所示(2)可通过版本查看是否已经安装成功...原创 2021-07-21 09:35:32 · 736 阅读 · 0 评论 -
ZeroMQ源码分析笔记之线程间收发命令
一、概述从ZeroMQ源码分析笔记之架构了解到,线程间通信包括两类:1) 一类用于收发命令,告知对象调用什么方法做什么事情,命令结构由command_t 结构体确定。2)socket_base_t 实例与session的消息通信,消息结构由msg_t确定。命令的发送与存储是通过mailbox_t实现的,消息的发送和存储是通过pipe_t实现。ZeroMQ线程可以分为两类:IO线程 和 zmq的socket。1)IO线程:像reaper_t、io_thread_t都属于这一类,特点:内含一..原创 2021-04-23 11:18:58 · 478 阅读 · 0 评论 -
ZeroMQ源码分析笔记之架构
一、概述ZeroMQ是一种基于消息队列的多线程网络库,其对套接字类型、连接处理、帧、甚至路由的底层细节进行抽象。提供跨越多种传输协议的套接字。引用云风的话来说:ZeroMQ并不是对一个socket的封装,不能用它去实现已有的网络协议。它不同于更底层的点对点通讯模式,它有自己的模式。有比tcp更高一级的协议。ZeroMQ并不一定基于tcp协议,也可以用于进程间和进程内通讯。它改变了通讯都基于一对一的连接的假设。ZeroMQ支持4种通讯模型1)一对一结对通讯用于支持传统的TCP Socke..原创 2021-04-22 18:32:16 · 700 阅读 · 3 评论 -
ZeroMQ的编译安装和使用实例
一、编译安装1.1 资料网址ZeroMQ官方文档网址:http://zguide.zeromq.org/page:all源码下载地址:http://download.zeromq.org/1.2 安装必须的库$ sudo apt-get install libtool$ sudo apt-get install pkg-config$ sudo apt-get install build-essential$ sudo apt-get install autoconf$ sud..原创 2021-04-22 16:37:38 · 1807 阅读 · 0 评论 -
UDP可靠性传输KCP实现原理和应用
一、如何做到可靠性传输 二、TCP可靠性传输原理 三、UDP可靠性传输实现原创 2021-02-18 17:00:14 · 2433 阅读 · 1 评论 -
去中心化技术与P2P框架分享
一、中心化网络为了更好的理解去中心化的概念,我们先来理解传统的中心化网络。 图1 传统中心化网络拓扑图 在传统的中心网络 二、去中心化网络 三、快播核心技术揭秘 四、网络地址映射NAT 五、网络穿透...原创 2021-01-26 17:23:16 · 1800 阅读 · 1 评论 -
ZooKeeper原理及编程应用
一、ZooKeeper概述1.1 什么是zookeeper?**zookeeper是一个开源的、分布式的,为分布式系统提供协调管理服务的开源软件。1、CAP原则CAP原则包括:一致性、可用性、分区容错性。1) 一致性:强一致性(如银行取钱,要么成功,要么失败),最终一致性。2) 可用性:合理的时间内得到合理的结果。3) 分区容错性:每个区域依然能够对外提供可用性以及一致性的服务。 图1 分布式系统示例上图示为一个分布式系统,其中A、B为访问节点;CDE为上海区域对外提供服务的节点,.原创 2021-01-24 16:33:18 · 465 阅读 · 0 评论 -
分布式锁的实现原理
一、线程锁、进程锁在介绍分布式锁之前,我们先来简单介绍下线程锁、进程锁。线程锁线程锁,主要用来解决的问题是:保护临界区域。使用方式:lock(mutex)、unlock(mutex)。进程锁为了控制同一操作系统中多个进程访问一个共享资源。nginx中的accept锁,就是一种进程锁,它采用的实现方式是:共享内存+信号量。 二、分布式锁2.1 分布式锁的实现方案分布式锁的常见实现方案有:1)数据库 redis,mysql2)zookeeper高效性比较:zookeeper &.原创 2021-01-24 00:30:19 · 3880 阅读 · 4 评论 -
一文剖析RPC
一、什么是RPC?RPC能解决什么问题?问题提出:有两个服务A和B,A和B分别部署在不同的服务器上,A要调用B服务的求和函数sumfunc,如何实现?RPC远程过程调用(Remote Procedure Call),一种用来处理远程机器之前通信问题的一种解决方案,RPC的出发点是屏蔽掉网络协议层的繁琐协议,能给用户暴露最直接的远程调用API。简单的理解是一个节点请求另一个节点提供的服务。要具体的理解RPC,我们先了解“过程”概念:1)同一个进程,同一个线程内部函数调用此为常见的函数调用,一.原创 2021-01-21 20:48:33 · 325 阅读 · 0 评论 -
开源加密库Openssl 剖析&实战
一、OpenSSL简介1.1 OpenSSL简介在计算机网络上,OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。它提供的主要功能有: SSL协议实现(包括SSLv2、 SSLv3和TLSv1)、大量软算法(对称/非对称/摘要)、大数运算、非对称算法密钥生成、 ASN.1编解码库、证书请求(PKCS10)编解码、数字证书编解码、 CRL编解码、OCSP协议、数字证书验证、 PKCS7标准实现和PKCS12个人数字证书格式实现等功能。.原创 2021-01-20 15:00:02 · 2557 阅读 · 1 评论 -
网络IO管理 (三)--用户态协议栈及netmap简述
一、C10M问题1.1 C10K在讲解C10M问题之前,我们先回顾C10K的问题。10年前,开发人员处理C10K可扩展性问题时,尽量避免服务处理器超过1万个的并发连接。通过改进操作系统内核以及用事件驱动服务器(典型技术实现如nginx和Node)代替线程服务器(典型代表:Apache),使得这个问题已经被解决。以传统的网络编程模型作为代表的Apache为例,C10K问题上的局限表现在:Apache的问题在于服务器的性能会随着连接数的增多而变差。性能和扩展性是不是一回事?答案是否定的。比如Ap原创 2020-12-23 20:19:01 · 1306 阅读 · 0 评论 -
网络IO管理 (二)--服务器线程模型Reactor和Proactor
一、概述对高并发编程, 网络连接上的消息处理,可以分为两个阶段:等待消息准备好、消息处理。高并发编程方法当然就是把两个阶段分开处理。即,等待消息准备好的代码段,与处理消息的代码段是分离的。多路复用就是处理等待消息准备好这件事的,但它可以同时处理多个连接!作为一个高性能服务器程序通常需要考虑处理三类事件: I/O 事件,定时事件及信号。两种高效的事件处理模型: Reactor 和 Proactor。二、Reactor2.1 Reactor机制普通函数的调用机制:程序调用某函数–>函原创 2020-12-22 10:05:02 · 226 阅读 · 0 评论 -
网络IO管理 (一)--IO模型&select/poll/epoll
网络IO会涉及到两个系统对象,一个是用户空间调用IO的进程或线程,一个是内核空间的内核系统 。比如,发生IO操作read时,会经历两个阶段:stage1:等待数据准备就绪。stage2:将数据从内核拷贝到进程或者线程中。一、问题引出我们先提出几个问题:为什么要有select/poll/epoll?异步操作怎么理解?为什么信号驱动IO网络模型不能大量操作?select/poll检测IO,检测的是什么?二、IO网络模型种类...原创 2020-12-17 21:22:55 · 318 阅读 · 0 评论 -
消息队列和ZeroMQ原理和应用
一、定义消息队列(message queue)本质就是个队列,先进先出FIFO。利用FIFO先进先出的特性,可以保证消息的顺序性。主要用途:不同服务server、进程process、线程thread之间通信。二、消息队列应用特性2.1 消息可靠性处理在实际应用中,我们可以通过以下要点的设计来确保消息的可靠性处理:ACK:消息收发确认ack,如果没有ack就超时,重传。序列号:定义序列号,消息序号是连续的,中间发现消息不连续的时候就认为消息丢失(生产者消费模式不适用)。备份:对数据进行备原创 2020-12-15 09:32:09 · 1575 阅读 · 0 评论