秒杀系统时间配置Nginx查看服务器系统时间
Posted 在你之后
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了秒杀系统时间配置Nginx查看服务器系统时间相关的知识,希望对你有一定的参考价值。
秒杀系统时间配置
时间配置
在秒杀活动中,页面往往需要显示秒杀倒计时。倒计时未结束时,按钮无法点击。如此,就会涉及到倒计时时钟的统一问题。倒计时的时钟绝对不能依赖于客户端,因为当用户的设备时钟不准确或用户处于非当前时钟时,那么倒计时就会出错。所以,倒计时的时间需要服务端统一返回,客户端根据服务端的时间进行倒计时数秒,并根据服务端的状态控制按钮。对于服务端如何提供统一的时间,有不同的方案。讲究点的可以提供统一的时间接口,这个时间是绝对准确的,不会依赖于服务器主机。当然,不讲究的可以使用下面这种方式,直接在返回秒杀品详情数据的时候返回时间和状态。在很多组织中,对于分布式的服务器都会进行统一的时间管理,不允许出现服务器之间的时钟差异。
ECS阿里云
一般公司运维会同步、校准各服务器时间,如果不可靠可以找其他替代方案,阿里云有个基于nginx的时间接口,支持百万级QPS(可能是centos默认做了NTP同步,直接nginx配置获取本地时间即可)。
阿里云提供了内网和公网NTP服务器,用于同步各网络中ECS实例的本地时间。内网和公网NTP服务器NTP是用于同步网络中计算机时间的协议,全称为网络时间协议(Network Time Protocol)。时区和时间一致性对于云服务器ECS非常重要,有时会直接影响到任务执行的结果。例如,您在更新数据库或者分析日志时,时间顺序对结果有很大影响。为避免在ECS实例上运行业务时出现逻辑混乱和网络请求错误等问题,您需要统一相关ECS实例的时区设置。另外,您还可以通过NTP服务同步各网络中ECS实例的本地时间。云服务器ECS为您提供了高精度的时间参考NTP服务器,其中ntp.cloud.aliyuncs.com服务器提供分布式的一级时钟源,适用于金融、通讯、科研和天文等以时间精度核心的生产行业。
Chrony为阿里云官方和社区推荐配置的时钟同步服务,相较于NTP有更高的时钟稳定性与更小的时间误差。当前阿里云ECS实例中,CentOS 7及以上镜像版本已默认配置Chrony服务,您无需额外配置即可正常使用。
配置
通过Nginx配置文件添加一个location,返回服务器的时间。例如:
location /time
default_type text/plain;
return 200 "$time_local\\n";
通过Nginx模块ngx_http_lua_module,使用lua脚本获取服务器的时间。例如:
location /time
default_type text/plain;
content_by_lua '
local time = os.date("%Y-%m-%d %H:%M:%S")
ngx.say(time)
';
通过Linux命令date查看系统时间。例如:
date
- Nginx单机百万QPS环境搭建需要注意以下几点:
- 关闭多余的服务和进程,释放内存和CPU资源。
- 调整Linux内核参数,优化网络连接和文件描述符等。
- 调整Nginx配置参数,优化worker进程数、连接数、缓冲区大小等。
- 使用wrk或ab等工具进行压力测试和性能分析。
性能:
简单查询,nginx调整后应该可以达到百万qps
Nginx单机百万QPS
- nginx单机百万qps的硬件配置没有一个固定的标准,因为不同的应用场景和请求类型会影响服务器的性能和资源消耗。
- 一般来说,要达到nginx单机百万qps的水平,需要具备以下条件:
- 服务器的CPU核数足够多,至少16核以上。
- 服务器的内存足够大,至少64G以上。
- 服务器的网络带宽足够高,至少10Gbps以上。
- 服务器的磁盘性能足够好,最好使用SSD或者RAID。
- 另外,除了硬件配置之外,还需要对Linux内核参数和Nginx配置参数进行优化调整,以提高网络连接和文件描述符等资源的利用率。
参考
PHP 秒杀系统简介与环境准备
秒杀系统特点
-
人多商品数量少 -
时间短流量高 -
外挂机器(黄牛)
技术分析
-
瞬时高并发的处理能力 -
多层次分布式处理能力 -
人机交互与对抗
系统环境搭建
技术选型分析
1、基础服务
-
Linux + Nginx + PHP + MySQL + Redis -
选择 Linux
而不是 Windows:免费、开源
,黑盒的东西相对少。 -
选择 Nginx
而不是 Apache :出于性能考虑,首先是网络的处理 Nginx 能够突破1 万个,10 万个甚至 100 万个链接
,能够让很多位用户的请求进来而不宕机
。而 Apache 的用户请求数量为 100 个,200 个,或者超过 500 个和 1000 个的时候,就很不稳定甚至会出现宕机的情况。 -
选择 Redis
缓存而不是 Memcached 缓存:是因为 Redis 的数据结构相对比较多
,Memcached 比较单一。
2、CDN(Content distribution network:内容分发网络),智能 DNS
-
选择原因:CDN 可以实现 分布式缓存
,并且支持全国多节点
。 -
CDN 的基本组成:由源站及其下的多个节点组成。将这些节点的 IP 存放到源站的列表里,然后再分配到全国各地 CDN 服务的缓存服务器的代码配置文件里。因为 只有源站会生成内容
,而所有的节点只能缓存内容
不能生成内容。 -
CDN 的工作原理:用户发起一个请求,首先会先找到最近的一个 CDN 服务器,这个服务器会优先从本地的缓存中获取内容,如果本地没有用户需要的内容,则会先从源站获取内容,接着本地服务器缓存起来,然后再发给用户。 -
智能 DNS 可以实现 多线路接入
。 -
智能 DNS 原理:可以在后台配置很多个 IP,DNS 有自己的一套系统可以找到对应 IP 的地理位置以及其运营商的信息。 -
DNS 工作原理:首先用户请求 DNS 解析时,DNS 会拿到用户的 IP 信息,接着会分析出该用户处于哪一个地区,属于哪一种网络类型,最后再匹配一个离用户最近的网络地域的服务器。 -
智能 DNS 的作用:分析 用户
的 IP,分析网络节点
服务器的 IP,然后智能对照
,能够给用户分配到最适合的网络服务。
3、负载均衡 LVS 和大型 Web 服务集群
-
选用 LVS:因为 LVS 是运行在网络层的负载均衡服务,所以在处理 网络连接
方面是比较高效稳定
的,并且 LVS 支持更大规模的网络集群
和更大量的网络请求
。 -
LVS 的好处:可以 屏蔽
用户对服务器的透明性
,可以让后台的服务器更好的实现动态调整(宕机,负载过高)。 -
工作原理:用户正常访问服务(访问的是 LVS 服务),接着通过 LVS 服务,把请求转发到 Web 服务(有多种转发方式,例:轮巡)。如果不希望请求比较零散的话,可以使用同一个 IP 命名到同一个服务器上去做处理。
开发环境准备
-
开发工具:Eclipse for PHP Developers、PHPStorm、EditPlus(免费、简单、高效) -
部署开发环境:XAMPP(windows 安装包)、MACOS brew 安装工具(Mac)、Linux yum(linux) -
代码管理器:Git、SVN
以上是关于秒杀系统时间配置Nginx查看服务器系统时间的主要内容,如果未能解决你的问题,请参考以下文章