TYPESDK 服务端设计思路与架构之六:性能及调优初步

经过本系列前几篇文字的分析和设计,我们成功地开发出了自己的SDK服务端。在我们自己的调试环境下运行一切正常,但是当然我们不能就这样把这套SDK服务端部署上线到正式生产环境,稍有正式大型项目经验的同学应该都知道性能优化以及部署上线相关设计对于服务端项目的重要性。我们到目前为止的分析设计中,并没有考虑到这些设计。那么,针对我们SDK服务端这样的应用场景,应该着重关注哪些相关的优化和设计呢?

数据存取优化

在我们的应用场景中,需要使用到存储的场景主要在以下几个处理中:

l  获取配置信息

对每个收到的请求,处理时都需要根据其来源游戏渠道等各种信息,获取到对应的配置信息,再作处理。配置信息访问频率相当频繁,但基本是只读的,处理过程中并不会对其进行修改。

l  存取订单信息

对支付产生的订单消息,服务端对其处理包括创建订单,查询订单和修改订单状态等等,对数据的处理包括储存和读取,两种操作频率基本相当。

l  保存日志信息

对收到的请求及产生的错误,服务端需要作保存日志的动作,这一动作属于纯写入操作,操作频率较高。

针对这几种数据,我们的处理策略也不相同:

对配置信息这样的频繁访问,又变化较小的数据,为了尽量加快访问速度,我们通常会选择将其存入内存。但是如果将配置信息以配置文件的方式保存,则又无法灵活管理。考虑到更进一步的动态加载配置需求,这里我们可以使用内存缓存的方式存取。即应用程序启动时从外部存储(DB)中读取配置,保存在内存中待调用,定期通过检查更新标志的方式更新配置。

订单信息属于重要的结构化信息,无疑应该保存在DB中。但是回顾一下前几篇文字中分析的支付到帐请求流程,可以发现,该流程对我们的处理效率提出了相当高的要求。如果我们不能在尽可能短的时间内,完成整个查询对比发货流程,就会导致渠道判定游戏服务端处理超时,从而触发渠道的订单重发机制。最糟糕的情况下,前一次处理过程还没有结束,渠道的后一次重发请求又到了,就会导致系统的处理效率急速下降乃至崩溃。因此,我们需要为订单建立一个缓存,为DB承担查询压力。在这方面,市面常见的缓存产品如Redis Memcache等都可以胜任该需求,具体设计这里就不再赘述。

日志信息属于只写不读的信息。如果将所有的日志都存入DB,无疑在空间和效率上都会不必要的消耗DB的性能。我们一般选择将日志以文件的形式存储。另外,这一写入操作必须使用异步形式处理,否则会大幅降低性能。关于异步处理,后文会进一步说明。

异步处理

任何可以晚点做的事情都应该晚点再做,异步处理正是基于这一原则来实施的。具体到我们的服务端设计上,我们可以总结出以下逻辑可以设计成为异步操作。

l  所有记录日志操作

l  大多数对DB的写入操作(包括修改订单状态/保存订单信息等)

读取操作则通常是一个同步操作,我们无法要求一个查询订单的请求“先返回一个已收到查询请求的信息,随后再异步提供查询结果”。

l  发货流程中,与游戏服务端通信的HTTP请求操作。

这里实际上异步操作由SDK端或由游戏端来实现均可达到我们的目的,但是还是由游戏服务端来实现更为合理。

具体的异步实现方式,由于开发语言及工具的实现各有不同,这里也不再详细讨论。

集群部署

在网站高并发访问的场景下,使用负载均衡技术为一个应用构建一个由多台服务器组成的服务器集群,将并发访问请求分发到多台服务器上处理,避免单一服务器因负载压力过大而响应缓慢,使用户请求具有更好的响应延迟特性。

使用集群部署和负载均衡技术的场合下,要求我们的应用在设计时也需要注意并发处理的技术细节,例如重复请求过滤,事务化处理逻辑等设计。原则上注意考虑多台服务端同时处理时带来的这些问题即可。

代码优化

之所以把代码优化的部分放在最后,是因为这部分无非是一些老生常谈的东西,相信读者每个人都处理过类似的优化工作。包括连接池资源复用,数据结构优化,利用垃圾回收机制等等。这里就需要读者自己根据所使用的开发工具和语言来实际操作了。

服务端设计的思路和架构系列文字,到本篇为止就告一段落,之后我们会用几篇文字和代码实际讲解如何具体实现本系列文字设计出的服务端。以及如何解决实际编码中遇到的设计问题。并在实际解决问题的过程中再进一步讨论更加深入的优化手段。

这个项目已开源,大家有兴趣可以自己研究或者参照项目编写自己的聚合SDK
项目地址:https://code.csdn.net/typesdk_code
项目地址:https://github.com/typesdk

时间: 2024-11-03 05:36:45

TYPESDK 服务端设计思路与架构之六:性能及调优初步的相关文章

TYPESDK手游聚合SDK服务端设计思路与架构之一:应用场景分析

TYPESDK 服务端设计思路与架构之一:应用场景分析 作为一个渠道SDK统一接入框架,TYPESDK从一开始,所面对的需求场景就是多款游戏,通过一个统一的SDK服务端,能够同时接入几十个甚至几百个各种渠道的SDK.而且这些渠道接口的具体接入字段和接入逻辑,每个月以至每周,都可能发生或大或小的变动.在这样一个复杂的应用场景下,我们应该如何设计一个足够强大而又足够灵活的SDK服务端呢? 首先我们需要厘清,在整个应用场景中,TYPESDK所处的位置,以及它所需要实现的核心功能. 图1 如图1所示,T

TYPESDK手游聚合SDK服务端设计思路与架构之三:流程优化之订单保存与通知

经过前两篇文字的分析与设计,我们已经可以搭建出一个能够支持多游戏多渠道的聚合SDK服务端,但这只是理想化状态下的一个简化模型.如果接入渠道的逻辑都是按照理想化的简化过程来构建,那么对于支付的请求,我们可以简化成这样几步: 游戏客户端创建订单. 游戏客户端(通过TYPESDK客户端)调用渠道lib库中相应接口,发起支付. 用户在弹出的支付窗口完成支付. TYPESDK服务端等待渠道服务端的回调,收到回调后通知游戏服务端. 游戏服务端执行发货动作. 但是显然这个简化流程在实际上线时是不够满足需求的,

头像服务端设计思路

思路 一 把图片上传到服务端.命名以用户的(用户名md5)作为文件名.要是以前有文件,覆盖以前的文件 二编写一个servlet处理获取头像请求. servlet接收一个用户名md5+大小的参数 根据 用户名md5+大小生成对应的图片 例如 用户名为ada 上传到服务端的位置为 /gravatar/ada.jpg 请求地址:/webstore/headimg/ada.jpg?s=120 对应的服务端文件地址 /gravatar/ada.jpg(原图片) /gravatar/ada/120.jpg

rsync服务端排错思路

rsync服务端排错思路 查看rsync服务配置文件路径是否正确,正确的默认路径为/etc/rsyncd.conf 查看配置文件里host allow,host deny,允许的ip网段是否是允许客户端访问的ip网段 查看配置文件中path参数里的路径是否存在,权限是否正确(正常应为配置文件中的UID参数对应的属主和组) 查看rsync服务是否启动,查看命令为:ps -ef|grep rsync.端口是否存在netstat -lnt|grep 873 查看iptables防火墙和selinux是

服务端高并发分布式架构 ESB 企业服务总线

服务端高并发分布式架构演进之路 - 个人文章 - SegmentFault 思否 https://segmentfault.com/a/1190000018626163 ESB 企业服务总线讲解 https://mp.weixin.qq.com/s/vWtuv2UnnVPi4U5w97REmg 银行企业服务总线应用架构 https://mp.weixin.qq.com/s/PwvPHGHbjotrST0biiTUKA 原文地址:https://www.cnblogs.com/yuanjiangw

TYPESDK手游聚合SDK客户端设计思路与架构之二:安卓平台统一化接口结构及思路

在上一篇<TypeSDK聚合sdk设计基本原则>中我们提到了,设计聚合sdk需要设计开发平台部分的接口,以及设计发布平台的聚合这2个大模块.那么我们今天就先来讲讲发布平台之一:安卓平台的统一化接口结构和思路. 一.相关的需求 安卓平台的统一化接口,我们需要考虑到具体以下的几点: 1.对外需要有统一的接口,保证不同的渠道sdk 对同一个游戏来说,是调用相同的接口,传递相同的参数 2.对内需要有一套扩展性很好的框架,可以应对不同渠道的sdk差异性 二.设计的模块 那么针对这些考虑点,安卓平台的统一

服务端高并发分布式架构的演进

本文以淘宝作为例子,介绍从一百个并发到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计的原则. 架构设计中的一些基本概念 分布式:系统中的多个模块在不同的服务器上部署,即可称为分布式系统.比如Tomcat和数据库分别部署在不同的服务器上,或者两个相同功能的Tomcat分别部署在不同的服务器上,都可以被称为分布式. 高可用:系统中部分节点失效的时候,其他节点能够接替它继续提供服务,即可认为系统具有高可用性

服务端高并发分布式架构演进之路

1. 概述 本文以淘宝作为例子,介绍从一百个并发到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计的原则. 2. 基本概念 在介绍架构之前,为了避免部分读者对架构设计中的一些概念不了解,下面对几个最基础的概念进行介绍: 分布式系统中的多个模块在不同服务器上部署,即可称为分布式系统,如Tomcat和数据库分别部署在不同的服务器上,或两个相同功能的Tomcat分别部署在不同服务器上 高可用系统中部分节点失效

淘宝服务端高并发分布式架构演进之路

1. 概述 本文以淘宝作为例子,介绍从一百个并发到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计的原则. 2. 基本概念 在介绍架构之前,为了避免部分读者对架构设计中的一些概念不了解,下面对几个最基础的概念进行介绍: 分布式 系统中的多个模块在不同服务器上部署,即可称为分布式系统,如Tomcat和数据库分别部署在不同的服务器上,或两个相同功能的Tomcat分别部署在不同服务器上 高可用 系统中部分节点