![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Server
文章平均质量分 87
MyObject-C
从事于游戏、广告、推荐、金融交易相关后台开发
展开
-
pcp开源框架
这将使主机上的性能度量收集器后台程序能够代表来自各种性能度量域代理(PMDA)的客户端来控制和请求度量。Performance Co-Pilot(PCP)是一个开源框架和工具包,用于监控,分析和响应实时和历史系统性能的细节。将每个收集器主机添加到pmlogger配置文件 /etc/pcp/pmlogger/control ,然后在监控主机上重新启动pmlogger服务。在动态环境中手动配置每个主机是不可行的,甚至是不可能的。1)检查远程主机example上的PCP服务, 并从历史上检查主机粉碎的本地存档。转载 2023-05-24 13:53:33 · 943 阅读 · 0 评论 -
zabbix安装配置
说明:操作系统:CentOSIP地址:192.168.21.127Web环境:Nginx+MySQL+PHPzabbix版本:Zabbix 2.2 LTS备注:Linux下安装zabbix需要有LAMP或者LNMP运行环境准备篇:一、Web环境:Nginx+MySQL+PHPCentOS 7.0编译安装Nginx1.6.0+MySQL5.6.19+PHP5.5.14...转载 2018-08-30 17:14:01 · 163 阅读 · 0 评论 -
高可用之热备
https://www.jianshu.com/p/b050d8861fc1转载 2018-08-24 16:18:06 · 402 阅读 · 0 评论 -
Serverchan
Serverchan实现微信告警推送 「Server酱」,英文名「ServerChan」,是一款「程序员」和「服务器」之间的通信软件。说人话?就是从服务器推报警和日志到手机的工具。官方链接:首页 | Server酱 http://sc.ftqq.com/3.version之前实现推送告警信息到微信的方法有如下几种:1、通过企业公众号实现—-收费:2、通过QQ邮箱,在微信平台...转载 2018-08-17 16:48:14 · 1986 阅读 · 0 评论 -
supervisor的简单说明
进程管理supervisor的简单说明背景: 项目中遇到有些脚本需要通过后台进程运行,保证不被异常中断,之前都是通过nohup、&、screen来实现,带着能否做一个start/stop/restart/reload的服务启动的想法找到里Supervisor。关于supervisor的介绍在网上大致搜索总结如下: Supervisor是用Python开发的一...转载 2018-08-06 11:37:46 · 226 阅读 · 0 评论 -
TOML基本介绍
GitHub 目前的新项目已经转用 CoffeeScript 了。CoffeeScript 比 JavaScript 要简洁优雅得多。同样地,GitHub 也觉得 YAML 不够简洁优雅,因此捣鼓出了一个 TOML。TOML 的全称是 Tom's Obvious, Minimal Language,因为它的作者是 GitHub 联合创始人 Tom Preston-Werner 。TOML ...转载 2018-10-11 17:56:46 · 7298 阅读 · 1 评论 -
广播系统测试总结
系统介绍作为基础服务,这套系统目前是公司性能要求最高的服务啦,这套系统分三个服务分别以A,B,C代替A:服务于gateway、BB:服务于A、gatewayC:服务于其他服务、B 测试环境centos720核,40processor125G万兆网卡,40队列 测试步骤情景一:目的是通过工具和各种服务混搭,测出单进程A的压力到底是多少物理机...原创 2018-09-20 19:14:05 · 326 阅读 · 0 评论 -
Zeppelin介绍
Zeppelin是一个高性能,高可用的分布式Key-Value存储平台,以高性能、大集群为目标,说平台是因为Zeppelin不是终点而是起点,在Zeppelin的基础上,不仅能够提供KV的访问,还可以通过简单的一层转换满足更复杂的协议需求。本文就将从背景,技术细节,回顾和未来计划几个方面来进行介绍。背景Zeppelin的故事首先从我们之前的一个项目Pika说起,Pika是一个完全兼容Red...转载 2018-09-14 11:44:40 · 25774 阅读 · 0 评论 -
分布式追踪系统架构与设计
总体结构与追踪数据管理我们的方案分为两大部分:所有服务集成到追踪库中,分配一个内存块来存储与查看追踪数据。我们选择Zipkin,在Twitter开发的一个可扩展的开源追踪框架,用于存储与查看追踪数据。Zipkin通常以Finagle对的形式出现,但是,像上一节提及的一样,我们排除了与我们现有基础设施冲突的并发症。Knewton构建追踪库,称为TDist,从地面起,开始作为公司“黑客日”的实验。...转载 2018-09-13 15:53:10 · 1073 阅读 · 0 评论 -
lock-free介绍
无锁编程 / lock-free / 非阻塞同步无锁编程,即不使用锁的情况下实现多线程之间的变量同步,也就是在没有线程被阻塞的情况下实现变量的同步,所以也叫非阻塞同步(Non-blocking Synchronization)。实现非阻塞同步的方案称为“无锁编程算法”( Non-blocking algorithm)。lock-free是目前最常见的无锁编程的实现级别(一共三种级别)。...转载 2018-10-12 14:54:32 · 10535 阅读 · 0 评论 -
几款压缩库介绍
LZ4LZ4能很好的支持多线程环境,获得更高的压缩和解压速度。QuickLZQuickLZ官网:http://www.quicklz.com/QuickLZ is the world's fastest compression library, reaching 308MB/s per core.QuickLZ自称是世界上最快的压缩算法,然而我们看到它和LZ4还...原创 2018-10-19 14:56:04 · 4506 阅读 · 0 评论 -
svn属性知识介绍
svn -r介绍-r [--revision] ARG : ARG (一些命令也接受ARG1:ARG2范围) 版本参数可以是如下之一: NUMBER 版本号 '{' DATE '...转载 2018-11-09 21:59:49 · 2199 阅读 · 1 评论 -
本地缓存介绍
1. 什么是缓存缓存有很多种,从 CPU 缓存、磁盘缓存到浏览器缓存等,本文所说的缓存,主要针对后端系统的缓存。也就是将程序或系统经常要使用的对象存在内存中,以便在使用时可以快速调用,也可以避免加载数据或者创建重复的实例,以达到减少系统开销,提高系统效率的目的。2. 为什么要用缓存我们一般都会把数据存放在关系型数据库中,不管数据库的性能有多么好,一个简单的查询也要消耗毫秒级的时间,这样...转载 2018-11-22 16:46:54 · 4023 阅读 · 0 评论 -
server基本组成
基础结构:字符串操作封装,例如分隔符等常用操作(string_handle)对象池封装位存储(bit_map)序列化反序列化buffer(octets,能够支持写时拷贝以及压缩功能)阻塞队列(block_queue)ring buffer时间封装json_to_pb,pb_to_json(pb_json_convert)无锁队列共享内存定时器(timer...原创 2018-11-22 19:59:28 · 549 阅读 · 0 评论 -
2018工作经历总结与发展规划
引子 当我看到“concurrency is hard without garbage collection is difficult”这句话的时候,把我带入了沉思,让我有着写这篇文章的想法。 谈谈工作经历 毕业后一直从事游戏开发,确切的说是服务端开发,产品也比较单一,一直是MMORPG,算是游戏中比较大型和复杂的一种吧;后来在一家(社交+游戏app)基础服务组,主要做...原创 2019-01-05 21:51:54 · 1096 阅读 · 3 评论 -
部署方案
在项目迭代的过程中,不可避免需要进行项目上线。上线对应着部署或者重新部署,部署对应着修改,修改则意味着风险。目前有很多用于部署的技术,有的简单,有的复杂,有的得停机,有的不需要停机即可完成部署。本文将对目前常用的部署方案做一个简单的总结。蓝绿发布(Blue/Green Deployment)1. 定义蓝绿部署是不停老版本,部署新版本然后进行测试。确认OK后将流量切到新版本,然后老版...转载 2019-02-22 10:26:43 · 3806 阅读 · 0 评论 -
UUID介绍与生成方法
什么是UUID?UUID是Universally Unique Identifier的缩写,它是在一定的范围内(从特定的名字空间到全球)唯一的机器生成的标识符。UUID具有以下涵义: 经由一定的算法机器生成为了保证UUID的唯一性,规范定义了包括网卡MAC地址、时间戳、名字空间(Namespace)、随机或伪随机数、时序等元素,以及从这些元素生成UUID的算法。UUID的复杂特性在保...转载 2018-09-13 10:32:01 · 124125 阅读 · 3 评论 -
随机端口把监听端口占用问题解决
1. 背景linux服务器启动时,会对指定的端口进行监听bind,如果同一个机器上这个端口已经被使用,则监听失败,程序无法启动。linux客户端连接服务器accept时,系统会分配本地临时端口用于网络连接。目前是”大混部”的时代,一台物理机可能会部署多个服务,如果端口号设置不好,很可能会出现端口被其他程序占用的情况。2. 解决方法针对我的linux机器看看本地临时端口配置(...转载 2018-08-20 20:10:33 · 2710 阅读 · 0 评论 -
高性能高可用服务
什么是高可用架构在介绍高可用架构的方案之前,先说一下什么是高可用架构,高可用架构应具备但不限于以下特征: 主从切换 很好理解,当其中一台机器的服务宕机后,对于服务调用者来说,能够迅速的切换到其他可用服务,从服务升级为主服务,这种切换速度应当控制在秒级别(几秒钟)。 当宕机的服务恢复之后,自动变为从服务,主从服务角色切换。主从切换一定是要付出代价的,所以当主服务恢复之后,也就不再替...转载 2018-08-27 21:54:48 · 203 阅读 · 0 评论 -
服务器架构设计
1、服务器结构探讨 -- 最简单的结构 所谓服务器结构,也就是如何将服务器各部分合理地安排,以实现最初的功能需求。所以,结构本无所谓正确与错误;当然,优秀的结构更有助于系统的搭建,对系统的可扩展性及可维护性也有更大的帮助。 好的结构不是一蹴而就的,而且每个设计者心中的那把尺都不相同,所以这个优秀结构的定义也就没有定论。在这里,我们不打算对现有游戏结构做评价,而是试着从头转载 2016-08-15 10:48:50 · 10849 阅读 · 0 评论 -
时间轮
问题引入:游戏里面每个Player身上有很多buffs,在每一个tick(最小时间段)都要去检查buff里面的每一个buff是不是过期,产生的效果如何,造成在每个tick里面都去遍历一个长list,明显很不好。怎么优化?1.原始模型:buff的状态在每一个tick里面都要更新!可以想象指针每移动一下,都会非常沉重地拖着所有的BuffList,好可怕……2.转载 2017-10-21 16:50:27 · 535 阅读 · 0 评论 -
AABB碰撞盒
AABB碰撞盒矩形边界框(转)另一种常见的用来界定物体的几何图元是矩形边界框,矩形边界框可以是与轴对齐的或是任意方向的。轴对齐矩形边界框有一个限制,就是它的边必须垂直于坐标轴。缩写AABB常用来表示axially aligned bounding box(轴对齐矩形边界框),OBBoriented bounding box(方向矩形边界框)。轴对齐矩形边界框不仅容易创建,而转载 2016-07-05 14:55:36 · 917 阅读 · 0 评论 -
Clumsy
笔者最近因为需要在局域网内模拟一个实际情况(即存在丢包、延迟等情况)。网上搜了很多工具,大多基于linux。后来好不容易在网上搜索到一款2014年出现的网络模拟工具----Clumsy。(参考了http://jagt.github.io/clumsy/)Clumsy是基于C语言开发的一款开源网络模拟工具。它能在Windows平台下人工造成不稳定的网络状态,应用它转载 2017-11-15 16:04:52 · 5710 阅读 · 1 评论 -
behaviac
1 项目概况behaviac是游戏AI的开发框架组件,也是游戏原型的快速设计工具。支持全平台,适用于客户端和服务器,助力游戏快速迭代开发。编辑器可以运行在PC上,操作方便直观可靠,支持实时和离线调试;编辑器可以导出xml/bson等多种格式,更可以导出C++/C#源码,提供最高效率。运行时支持全平台,有C++/C#两个版本,原生支持Unity。已被多款知名游戏及更多其他预研项目使用。所有代转载 2017-11-15 16:07:30 · 1752 阅读 · 0 评论 -
evbuffer结构与基本操作
Libevent将缓冲数据都存放到buffer中。通过一个个的evbuffer_chain连成的链表可以存放很多的缓冲数据。 这是一个很常见的链表形式。但Libevent有一个很独特的地方,就是那个evbuffer_chain结构体。 首先,该结构体有misalign成员。该成员表示错开不用的buffer空间。也就是说buffer中真正的数据是从buffer + mi...转载 2018-03-08 17:00:42 · 613 阅读 · 0 评论 -
event_base结构体
Libevent在实现线程、内存分配、日志时,都是使用了函数指针和全局变量。在实现多路IO接口上时,Libevent也采用了这种方式,不过还是有点差别的。相关结构体: 现在来看一下event_base结构体,下面代码只列出了本文要讲的内容:[cpp] view plain copy//event-internal.h文件 struct event_base { ...转载 2018-03-09 15:55:13 · 351 阅读 · 0 评论 -
服务器最大并发连接数
关于TCP服务器最大并发连接数有一种误解就是“因为端口号上限为65535,所以TCP服务器理论上的可承载的最大并发连接数也是65535”。先说结论:对于TCP服务端进程来说,他可以同时连接的客户端数量并不受限于可用端口号。并发连接数受限于linux可打开文件数,这个数是可以配置的,可以非常大,所以实际上受限于系统性能。从理论上说,端口号的作用是在网络连接中标识应用层的进程,服务端一般使用众所周知的...转载 2018-03-13 20:18:57 · 11397 阅读 · 3 评论 -
evbuffer接口说明
译自http://www.wangafu.net/~nickm/libevent-book/Ref7_evbuffer.htmllibevent的evbuffer实现了为向后面添加数据和从前面移除数据而优化的字节队列。evbuffer用于处理缓冲网络IO的“缓冲”部分。它不提供调度IO或者当IO就绪时触发IO的功能:这是bufferevent的工作。除非特别说明,本章描述的函数都在event2/b...转载 2018-04-09 18:01:04 · 451 阅读 · 0 评论 -
缓存淘汰算法--LRU
1. LRU1.1. 原理LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。1.2. 实现最常见的实现是使用一个链表保存缓存数据,详细算法实现如下:1. 新数据插入到链表头部;2. 每当缓存命中(即缓存数据被访问),则将数据移到链表头部;3. 当链表满的时候,将链表尾部的数据丢弃...转载 2018-05-08 15:31:44 · 310 阅读 · 0 评论 -
git命令
Git commit 撤销在git push的时候,有时候我们会想办法撤销git commit的内容1、找到之前提交的git commit的idgit log找到想要撤销的id2、git reset –hard id完成撤销,同时将代码恢复到前一commit_id 对应的版本3、git reset id完成Commit命令的撤销,但是不对代码修改进行撤销,可以直接通...转载 2018-07-24 14:36:33 · 159 阅读 · 0 评论 -
protobuf string/bytes
protobuf提供了多种基础数据格式,包括string/bytes。从字面意义上,我们了解bytes适用于任意的二进制字节序列。然而对C++程序员来讲,std::string既能存储ASCII文本字符串,也能存储任意多个\0的二进制序列。那么区别在哪里呢?同时在实际使用中,我们偶尔会看到类似这样的运行错误: [libprotobuf ERROR google/protobuf...转载 2018-08-01 14:35:01 · 2451 阅读 · 0 评论 -
svn 命令
1、创建一个项目仓库svnadmin create /home/huzza/test_svn2、import初始文件到项目仓库中svn import -m source_file_path URL本例 URL:file:///home/huzza/test_svn/sesame/trunkfile:// ------> 告诉svn是本地目录3、checkout文件到本地目录svn check...转载 2015-01-28 15:54:51 · 255 阅读 · 0 评论 -
日志库比较
事实上,在C的世界里面没有特别好的日志函数库(就像JAVA里面的的log4j,或者C++的log4cxx)。C程序员都喜欢用自己的轮子。printf就是个挺好的轮子,但没办法通过配置改变日志的格式或者输出文件。syslog是个系统级别的轮子,不过速度慢,而且功能比较单调。尝试了几种C/C++ log库,简单记录如下:1 log4j的衍生品日志是应用软件中不可缺少的部分,Apache的开...转载 2018-08-17 17:21:40 · 1076 阅读 · 0 评论 -
Server
原创 2014-04-25 18:21:24 · 316 阅读 · 0 评论