APP下载

基于阿里云ECS 服务器的项目前端搭建及数据存储

2023-09-18李晓宇韩飞驰黄文世许光辉任博文曲中水李秋实

科技创新与应用 2023年26期
关键词:阿里消息客户端

李晓宇,韩飞驰,黄文世,许光辉,任博文,曲中水*,李秋实

(1.哈尔滨理工大学 计算机科学与技术学院,哈尔 滨150080;2.大庆市实验中学,黑龙江 大庆 163711)

阿里云服务器(Elastic Compute Service,ECS)是一款高效、可靠的云计算服务,其可以为用户带来免硬件投入的服务器资源,使用起来更加便捷,同时也能够帮助用户构建更加稳定、安全的应用,大大提高运维效率,降低IT 成本。ECS 具有性能卓越、稳定可靠、弹性扩展的云计算特点。采用阿里云服务器ECS 作为数据存储平台,不仅可以有效降低成本,而且还能够大大提升插座项目的运行效率。

1 阿里云服务器ECS 的搭建

1.1 后端与阿里云ECS 服务器连接

使用阿里云ESC 其内部结构是一台Linux 系统(centOS7),可安装MySQL,Tomcat,Redis,Zookeeper 和RabbitMQ,本地电脑通过远程连接(NaviCat、XShell)在输入阿里云服务器公网IP 和端口,用户名和密码下即可与阿里云服务器连接(前提需在阿里云安全组中添加端口号、IP 和用户信息)。在SpringBoot 中找到resource.yml,进行数据库连接的相关配置(如url、username,password 等),如图1 所示。

图1 配置SringBoot 连接ECS 服务器数据库

其中server 字段表示程序开启Tomcat 后网站登录显示的服务端口号,此端口号可以为任意号码,一般默认为8080,由于阿里云ECS 服务器部署了Tomcat后,其安全组中自带Tomcat 的IP 地址为80,即网站HTTP 服务的端口,因此可通过程序配置对其进行修改为8080/8081,或者在阿里云服务器中使用指令:“iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080”实现对Tomcat 的IO 默认端口进行修改。Database 即为与数据库连接地址,部署于阿里云中的程序数据库,一般IP 地址为localhost:1663 即可,若使用服务器公网IP 加端口号,可能会导致数据库连接不上抛出异常错误。

1.2 前端与后端连接

Ajax 是一种异步网络请求处理技术,使用JavaScript 执行,能够在不跳转、不刷新的状况下,在网站后台提供数据信息,并部分修改主页信息内容。其原理是利用XMLHttp 对象将前台数据传递到后端,后端接受到申请后,将要求的结论传回前台,完成数据信息的来回传送,而无需页面的回发,从而提高网络的效率和可靠性。利用这种方式,我们能够做到无刷新。

1.2.1 实现流程

请求XMLHttpRequest 对象,自动打开请求地址并初始化信息,然后,发出请求信息,监听回调函数的运行情况,最后接收服务器返回的应答结论。

前端方面通过对操控对象设置IP 号,操控方式(GET/POST),后端使用注解(GetMapper(“IP”)或PostMapper(“IP”))方式,实现后端与前端的连接。若是返回另一页面,则使用return“指定页面.xml”进行返回,若是返回数据,则可通过ResultSeason 函数,将返回的主体进行返回,实现后端数据向前端进行传递,前端接收数据并显示,以完成B/S 的基本框架。

1.2.2 Ajax 优点

采用无刷新的页面设计,可以有效地与服务器进行通信,大大缩短客户时间,提升体验。

采用异步技术与服务器进行交互,可以大大提高响应速度。

通过将原本主机上的任务迁移到服务器端,能够利用服务器端的空闲资金,有效减少主机和服务的负荷,节俭空间和宽带租用花费。

1.2.3 数据可视化

ECharts 是一个开源的可视化库,采用JavaScript完成,能够在PC 和手机机器上顺畅执行,并且兼容当前大多数网页和浏览器(IE8/9/10/11、Chrome、Firefox、Safari 等),基本依靠矢量图形库[ZRender],带来直接、丰富多彩的交互体验,为用户创造一种更加有效的数据可视化显示方式,能够根据个人需求定制的数据可视化图表。

1.2.4 rem 适配

为了满足各种页面的需求,rem 适配方法被广泛应用。rem 是一种比较长度单位,能够在各种宽度的显示屏上按比例缩放,从而使根元件(即html 元素)的font-size 计算值得到相应的倍率。通过调整html 的font-size,根据各个显示屏的宽度,以相同的比率动态调整,并将px 更换为rem,能够有效地改变根元件的字体大小,从而达到良好的视觉效果,使用户能够获得更加流畅的体验。

1.3 消息队列RabbitMQ

项目的数据传输使用RabbitMQ 来进行消息队列和消息确认机制[1],RabbitMQ 的本质如图2 所示。

图2 RabbitMQ 原理图

RabbitMQ 即为一个中间代理,在生产者发布消息时,需经过Exchange 交换机,然后根据自身的交换类型以及和Queue 的Binding Key 来决定消息的去向。RabbitMQ 采用TCP 的传输机制,即RabbitMQ 支持消息确认ACK。

ACK 是一种客户端反馈机制,其从RabbitMQ 收到消息并处理完成后,RabbitMQ 会根据消息的内容和特征,将其从队列中删除,以确保消费者能够及时获取服务器上的信息。如果消费者因为网络不稳定等原因无法接收到ACK 反馈,RabbitMQ 会将其再次放入队列中,并将其推发给其他上线的消费者,以确保消费者服务器故障时,能够及时获得有效的帮助和支持,没有任何消息或任务被遗漏。

RabbitMQ 支持消息的持久化[2],保证了当Rabbit-MQ 在没有客户端访问时因自动关闭而导致原本消息内容丢失。开启方法为:

1)boolean durable = true;

2)channel.queueDeclare(“hello”,durable,false,false,null);

除此之外,RabbitMQ 还支持负载均衡,我们使用prefetchcount=1 这个设置,其告诉RabbitMQ,不要一次将多个消息发送给同一个消费者(即客户端)。保证只有当消费者处理完成当前消息并反馈后,才会收到另外一条消息或任务,避免负载不均衡(虽然阿里云ESC服务器自带负载均衡,但是双重的负载均衡可以二次保护系统,防止其崩溃)。

1.4 Redis 缓存

Spring Cache 是一种抽象的缓存类型,可以支撑多种类型的缓存,如Redis、EHCache 等,并且可以通过给出各种注解来精简缓存的应用,从而更好地支撑各种方式。Redis 有5 种数据结构,分别为string,list,set、hash、zset。zset 是一个广泛应用的有序列表,相似于Java 中的SortedSet 和HashMap,但其内部体现运用了一个更具复杂性的跳跃表构造。这种构造使用随机策略,可以确定新元素能够被分配到第几层。Redis不仅拥有可靠的过期时间,而且还能够根据不同的数据结构来设置过期时间,例如hash架构的过期时间可能是某个hash 对象的过期,而不仅仅是某个子key 的过期[3]。

Redis 是一款开源的、采用C 语言的非关系型数据库,能够以key-value 的方式储存信息,这使得其能够在内存中实现高性能的储存,与传统的关系型数据库有着本质的不同。非关系型数据库不仅仅是某种数据结构化存储方法的集合体,还必须遵循一些基本的要求,比如sql 标准、事务处理、表结构等,以确保数据信息的安全性和可靠性。

Redis 的主要优点在于:①数据存储在内存中,具有极快的存取速度和强大的并发处理能力。②支持更多的value 类型,包括string、list、set、zset 以及哈希类型,这些类型可以更有效地存储和管理数据。③Redis的存在,大大补充了Memcached 等key-value 数据库的缺陷问题,在某些情况下,可以为关系数据库(如MySQL)提供有效的支持;④Redis 支持数据集群,能够实现大量数据的主从一致和负荷平衡。主服务器能够与任意数量的从服务器进行数据交换,而从服务器则能够与其他主服务器进行连接。

缓存对于数据库而言是至关重要的,若大量缓存失效,那么所有的访问均由数据库承担,此现象称作雪崩。当缓存失效时,会对底层系统造成巨大冲击。为避免这种情况,许多系统都会采用加锁或队列请求的方法来确保数据库不会被同时读取。另一种简单的方法是将缓存的过期日期分散开,比如说加入某个随机值(1~5 min),以保证每个缓存的过期日期的重叠率大大降低。这样一来可以有效地减少雪崩效应对底层系统的冲击,并确保数据库的安全性。很难有任何集体失效的事件发生。枷锁代码如图3 所示。

图3 枷锁排队

Redis 缓存击穿是一种常见的数据库系统故障,它可能是由于存取的key 相应的信息在Redis 中过期,导致大规模并发申请无法及时响应,从而导致数据库系统崩溃。因此,为了避免这种情况的发生,应该采取有效的措施来防止Redis 缓存击穿,以确保数据安全,一种常用的方法是采用mutex。这意味着,当缓存失效时,不要立刻访问数据库,转而利用缓存软件中的一些功能(例如Redis 的SETNX 或Memcache 的ADD)来设置mutex key。返回值为true 时,就可以继续使用缓存。

1.5 Zookeeper

Zookeeper 是一款开源的分布式程序协同业务,像航班调度员一样帮助管理天空中各个航班的飞机。在Apache Hbase 和Apache Solr 的散布式集群中均用到了Zookeeper。Zookeeper 是HaDoop 项目的一种重要组成部分,他提供了一系列强大的功能,包括分配信息管理、名称服务、分布式锁定和集群信息管理等[4]。

Zookeeper 是一种分布式服务管理架构,以观察者模型为基础,负责管理存储和管理工作所有关注的信息,并接收观察者的申请。如果上述信息发生,Zookeeper 将立即告知已登录的观察者,以便他们能够作出适当的反映,以便实施集群中Master/Slave 管理模式。如图4 所示。

图4 Zookeeper 结构

Zookeeper 的特点:①Zookeeper 是一组由管理者和伴随者构成的群体,其中管理者负责发动投票并做出决策,同时也会定期更新系统状况;伴随者则负责管理接受用户请求,并将数据及时反馈给用户,在选择管理者的进程中参加表决,以确保操作系统的有效运行。②从同一个client 发出的更新请求应当按照其发送顺序进行处理,以确保数据的准确性和及时性。③实时性,client 可以在短时间内获取最新的数据。

2 结束语

本文阐述了客户端以及服务端连接阿里云ECS 服务器数据库的主要方式,以及客户端在操作服务器时所用到几项技术。通过Navicat 的连接,RabbitMQ 的中间处理,Redis 缓存的查询和负载均衡,json 格式的数据传输,http 前端经过js 和Ajax[5]在Tomcat[6]的中间处理下与后端的连接,让我们可以通过本地远程连接操控服务器的运行,以及信息的处理,最后将项目程序成品压缩成war 包放入服务器中,实现自主运行。

猜你喜欢

阿里消息客户端
云上阿里
一张图看5G消息
辰辰带你游阿里
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
基于Vanconnect的智能家居瘦客户端的设计与实现
阿里战略
阿里是个好榜样
消息
消息