热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C++转erlang后感想

Erlang最大的优点是方便,很多基础功能都已经集成到Erlang语言中。之前用C++写服务器的时候,管理TCP连接很繁琐,需要写一大堆代码来实现。底层的框架需要

    Erlang最大的优点是方便,很多基础功能都已经集成到Erlang语言中。之前用C++写服务器的时候,管理TCP连接很繁琐,需要写一大堆代码来实现。底层的框架需要写很多代码实现,这样既浪费时间,又会有很多BUG。但是用Erlang就方便多了,底层的一切你都不需要考虑,你只需要考虑,服务器的架构以及业务逻辑。从此让你彻底从底层的泥潭中解脱。我从千年开始了解学习Erlang,到现在我已经彻底爱上了Erlang。好了,废话不多说,开始详细介绍下我设计的这个服务器架构吧。
    首先看下整个架构的布局,如下图:
    
    如上图所示,整个架构由四部分组成,分别是连接管理服务器、账号服务器、游戏服务器以及数据服务器。
    连接管理服务器既网关服务器,主要作用是管理与客户端的网络连接,将服务器组与外网隔离。只有连接服务器中会监听网络连接,连接管理服务器与其他类型的服务器器组成Erlang集群。互相之间通过Erlang消息进行同步。连接管理服务器中会有一个负载平衡节点,用来负责对连接服务器中的所有节点做负载均衡。连接服务器中还有N个网关节点,用来管理客户端连接以及消息传递,网关节点的数量通过负载可动态增加。
    账号服务器,管理整个平台的账号,对客户端做登陆验证,如果项目正式上线还要负责充值的工作。账号服务器由N个节点组成,根据负载可动态增加节点数量。整个架构的数据库都采用Erlang自带的Mnesia分布式数据库,这个数据库既可以做永久保存也可以做Cache,对游戏服务器再合适不过了。Mnesia作为数据永久保存方案,唯一的不足是做数据统计不是很方便。像关系型数据库,有很强大的SQL做支持,做统计那是相当的方便。虽然有不足之处,但是带来的好处也是显而易见的,那就是简单,以及天生对分布式的支持。我在这里为什么不选用MySQL之类的数据库,原因就是Mnesia简单易用,正好符合了KISS原则。我信奉的原则就是KISS,只要能实现我需要的功能,那么实现的越简单越好。复杂意味着不可靠,为什么说不可靠呢,可能有些人觉得我太绝对了,在软件项目中人越多那随之带来的各种BUG也就越多。复杂的系统一定要多人的合作才可以完成,这个是不容置疑的。而且每个人对项目的理解不同,对软件开发的理解也不尽相同,虽然可以统一项目组中每个人的代码风格,但是没有办法统一每个人的思考方式。
    游戏服务器,游戏的所有逻辑都在游戏服务器中实现,对于我现在要做的这款飞行类的页游而言,已经足够了。游戏服务器由N个节点组成,根据负载可动态增加节点数量。游戏数据库也是用Mnesia实现,但是和账号数据库是分离的,他们之间不需要知道互相的存在,从上图也可以看出。如果项目到后期变的更复杂,那游戏服务器这里可以分出单独的节点做复杂的计算,甚至可以把这样的节点单独的隔离到其他的物理机,保证游戏的响应速度。
    总结,架构的游戏世界是个统一的游戏世界,所有用户都在同一个世界中。所有服务器中的节点都是通过负载动态增加的,部署的时候可以部署到同一个物理机上也可以部署到不同的物理机上。做了这么多年的C++服务器,感觉用C++写服务器要实现的东西太多了,要考虑的东西也太多了,让人很累。虽然说是为了效率考虑,但是我觉得如果C++代码写不好,最终的效率反而更不好。我认为一个中级的Erlang程序写出来的服务器可以和一个高级的C++写的服务器程序相媲美,但是培养一个Erlang高手和培养一个C++高手的代价显然是不一样的。

推荐阅读
  • 14亿人的大项目,腾讯云数据库拿下!
    全国人 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 目录Atlas介绍Atlas部署Atlas基本管理Atlas结合MHA故障恢复读写分离建议Atlas介绍Atlas是由Qihoo360Web平台部基础架构团队开发维护的一个基于My ... [详细]
  • Nginxgaodaima.comnginx属于七层架构,支持的是http协议,本身对tcp协议没有支持。所以不能代理mysql等实现负载均衡。但是lvs这个东西不熟悉,主要是公司 ... [详细]
  • mysqli预处理编译的深入理解【MySQL】
    数据库|mysql教程php教程,用户数据库-mysql教程bitsCN.com记得以前php点点通也写过mysqli的预处理的php教学,那时候只是看书乱写的,没懂原理,数月过后 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • [翻译]微服务设计模式5. 服务发现服务端服务发现
    服务之间需要互相调用,在单体架构中,服务之间的互相调用直接通过编程语言层面的方法调用就搞定了。在传统的分布式应用的部署中,服务地 ... [详细]
  • ZooKeeper 学习
    前言相信大家对ZooKeeper应该不算陌生。但是你真的了解ZooKeeper是个什么东西吗?如果别人面试官让你给他讲讲ZooKeeper是个什么东西, ... [详细]
  • php网站设计实验报告,php网站开发实训报告
    本文目录一览:1、php动态网站设计的关键技术有哪些软件,及搭建步骤需要哪些页面,分别完成 ... [详细]
  • 什么是网关服务器初学linux服务器开发时,我们的服务器是很简单的,只需要一个程序完成与客户端的连接,接收客户端数据,数据处理,向客户端发送数据。但是在处理量很大的情况下,一 ... [详细]
  • Kubernetes(k8s)基础简介
    Kubernetes(k8s)基础简介目录一、Kubernetes概述(一)、Kubernetes是什么(二& ... [详细]
  • 很多同学对热备,冷备,云备了解不深,我科普一下IT行业各种备份术语。以后别闹笑话了。假设你是一位女性,你有一位男朋友&#x ... [详细]
author-avatar
sijiamian_767
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有