2 因为应用和数据库是两个不同的业务,并且应用的访问量和数据的处理量可能会相差很大,如果将它们部署到同一个服务器上,会造成资源的浪费和性能瓶颈,同时还会增加服务器的故障率。
3 建议将应用和数据库部署到不同的服务器上,这样可以将资源合理分配,提高应用和数据库的性能,也减小了服务器故障率,保证了业务的可靠性。
最近开发了一基于springcloud的微服务架构的门户项目,因为客户对系统性能有要求,所以楼主对系统的一些api接口进行了大量压力测试。在压测过程中,发现接口的性能瓶颈之一是服务网关和数据库部署在虚机上,所以本文将分享内容分为两部分
性能压测思路是从软硬件负载 f5,nginx,到容器化平台k8s、docker、zuul网关,再到数据存储es、mysql、mongodb、redis,进行全面测试。
性能压测汇总
部分接口压测结果
空接口压测不走zuul,一个业务节点tps能达到 32000, 走zuul网关,一个业务节点空接口tps只有11000,性能损耗64%。
当时就感觉zuul网关在我心中高大的形象碎了一地,但是没办法,性能不达标必须要优化。所以楼主查了很多资料,也问过一些docker和k8s的容器化平台大牛,总结出两点经验:
所以楼主向公司申请物理机,继续性能压测,当然这不是重点,重点是接下来要讲的:为什么服务网关和数据库不能部署到虚拟机上 。
虚拟机的特点
io开销
我们知道,不管虚机上部署了多少个应用,一旦涉及到数据的存储,如果采用虚机部署数据库,会带来不必要的网络io开销。因为虚拟机在调度大量物理的cpu和内存、特别是磁盘IO时,必须经过虚拟机和物理机两层网络io读写开销 *** 作,是非常耗系统性能的。
一般情况下,使用虚拟机部署应用,其性能衰减约20%左右,这不是优化代码能解决的。
共享物理机资源
因为虚拟机在cpu资源、网络等方面共享物理机资源,虚拟机之间会存在竞争物理机资源,造成程序不稳定情况。
docker容器部署
更要命的是,如果数据库和zuul网关部署到容器(实质也是虚拟机)里,那么网络io读写变成docker(虚拟机)到虚机,再到物理机三层访问,无形之中又增加了io读写性能开销。尤其是对于请求吞吐量要求很高的服务网关zuul,是不能容忍的。
所以虚机对于IO密集型以及对延迟要求很高的业务场景不合适。
另外,早期的时候,作为一名架构师需要尽早的规划好服务网关和数据库的物理部署方式以及软硬件性能要求。
mysql安装
yum -y install mysql mysql-server mysql-devel
chkconfig --level 35 mysqld on
/etc/initd/mysqld start
mysql_secure_installation 这个是粗劣地设置下数据库root用户等权限
将GitLab的数据库导入阿里云PostgreSQLRDS
GitLab的数据库用的是PostgreSQL,之前由于阿里云RDS不支持PostgreSQL,只能将GitLab的数据库部署在云服务器上。
6月1日得知阿里云推出了PostgreSQLRDS,于是立马将GitLab的数据库迁移至PostgreSQLRDS。
下面分享一下迁移的主要 *** 作步骤:
1)在GitLab服务器上备份GitLab数据库
*** 作命令:
sudogitlab-rakegitlab:backup:createSKIP=db
注:这个命令原本是只备份数据库,但实际运行时也会备份,可以在完成数据库备份时,ctrlC直接退出。
数据库备份成功后,会在/var/opt/gitlab/backups/db文件夹中看到databasesql文件,导入时只需将这个文件导入到阿里云RDS。
2)在阿里云RDS中创建GitLab的数据库帐户与数据库
在阿里云RDS控制台首页点击“登录数据库”,进入idbrdsaliyun,选择对应的PostgreSQL实例。
a)创建2个帐户:gitlab,gitlab-psql
b)创建gitlabhq_proction数据库,所有者为gitlab。
3)在GitLab服务器上进行导入 *** 作
a)cd/var/opt/gitlab/backups/db
b)psql-h[RDS实例网址]p3433-dgitlabhq_proction-Ugitlab-fdatabasesql
1启动Websphere60服务
2打开IE浏览器,在地址栏中输入:localhost:9060/ibm/console/,登陆Websphere60管理控制台
3在导航栏左侧选择:环境-〉Websphere变量
找到ORACLE_JDBC_DRIVER_PATH,输入ORACLE_JDBC_DRIVER_PATH的值,指定ORACLE数据库驱动jar包的位置,确定,保存。
4在导航栏左侧选择:资源-〉JDBC提供者
5在右侧JDBC提供者新建页面点击“新建”按钮
6按照下图选择ORACLE数据库相关类型设置,点击下一步,完成第一步设置:
7配置页面的设置全部默认,不用修改,点击确定,保存。
8点击刚才新建的ORACLEJDBCDRIVER,进入配置页面,点击右侧的“数据源”
9点击“新建”,新建数据源:
10输入名称:inforflowDS;JNDI名称:jdbc/inforflowDS;数据存储helper类名Oracle数据源属性中输URLjdbc:oracle:thin:@数据库服务器IP:1521:oracle点击“确定”保存。
11点击“inforflowDS”数据源,点击右侧的相关项:J2EE连接器体系结构(J2C)认证数据条目
12点击“新建”,输入用户别名flow_oracle,用户标识:system密码:admin,点击确定,保存
13打开inforflowDS数据源配置页面,在组件管理的认证别名下拉框中选择上面刚刚新建好的J2EE连接器体系结构(J2C)认证数据条目—flow_oracle点击确定,保存设置
14在数据源页面点击“测试连接”
15测试连接成功
云数据库是指被优化或部署到一个虚拟计算环境中的数据库,可以实现按需付费、按需扩展、高可用性以及存储整合等优势。
企业伴随着业务的增长,成倍增长的数据需要更多的存储空间,此时,云数据库有助于应对许多这些数据库方面的挑战。
让用户能够在云中轻松设置、 *** 作和扩展关系数据库,并可以充分结合公有云中的计算、网络与存储服务,从而以一种安全、可扩展、可靠的方式,迅速选择、配置和运行数据管理基础设施,使用户能专注于自身应用程序和业务。
RDS是关系型数据库(RelationalDatabaseService),一种基于云计算的可即开即用、稳定可靠、d性伸缩、便捷管理的在线关系型云数据库服务。
虽然客户可以在云服务器上自建MySQL,而其也会带有部分云特性:数据高可靠性保障、d性扩展、基础运维等。但与在云服务器自建数据库相比,RDS为单位提供更多的自动化服务,如:数据库自动备份、IP白名单、详细的实时监控、容灾、读写分离等,还避免了云服务器带来的异常,如云服务器CPU偶尔会被mysql进程拉到100%。
华云数据RDS提供了容灾、备份、恢复、监控、迁移等方面的全套解决方案,支持将本地数据库迁移到RDS,平滑完成数据库的迁移工作,彻底解决数据库运维的烦恼。
部署一个BS的应用,一般是有web服务器、应用服务器、数据库服务器,至于文件服务器可以放在应用服务器,如果你开发的系统文件是直接存放在数据库的,那么不需要用到文件服务器。一般情况下,非大型企业级的应用,web服务器和应用服务器不需要分开,使用tomcat部署即可,tomcat里面既可做应用服务器,也内置了web服务器实现用户请求转发。
至于具体如何部署,你可以去baidu搜索下tomcat部署方法即可。
如果你要说web服务器和应用服务器的区别,通俗来说就是web服务器主要处理静态的请求和转发请求及反馈结果,而应用服务器是处理动态请求。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)