MySQL应用架构优化-实时数据处理

http://www.ttlsa.com/mysql/mysql-application-architecture-performerce-1/

1.1. 场景

在和开发人员做优化的时候,讨论最多的应该是结合应用场景编写出合适的SQL。并培训开发应该如何编写SQL让MySQL的性能尽量好。但是有一些的场景对于SQL的优化是行不通的。

打个比方,产品有这样的需求:针对每个商品实时显示销售者的销售量,并且按销售量做排序,还要实现 分页。这个需求看上去很简单,实现起来也很容易。无非就是对三张表(seller、goods、orders)进行查询、聚合、排序。但是对于上亿订单量来说,这样查询简直就是一个噩梦。

分析:这边主要是需要按销售量来进行排序,这样的操作在这里就比较可怕。如果没有这个的话,我们的按下面步骤来写SQL,MySQL跑起来就很爽:

  • 按分页需求,先查出销售者的个数(如:100个销售着,去10个)。
  • 通过1取出的销售者到orders中查询订单并GROUP BY。
  • 通过2中的orders中的goods id 取出商品信息。

可惜的是我们不是产品,不能按照我们的意愿来。当然,最好的办法就是说服产品,干掉类似这样的需求。或改变一种方式来实现这中需求,如:不要实时的展示。可是说服产品和顶在头上的人谈何容易啊,也许是关注的东西是不一样的吧。

1.2. 解决方案

首先要说明一些,像这样统计的计算能不实时就不实时。我们应该把OLAP的操作和OLTP的操作尽量解耦。来做。如白天我们关注的是OLTP(就是大家普通在用的应用程序),晚上我们关注的OLAP(Hadoop实现)。

这是我们的奇葩需求需要实时,所以Hadoop都是用不上的了。这时我们就需要用气实时计算的系统。现在业界应该有两个实时计算系统比较流行:Storm、Spark。这边我选用了使用Storm来作为我们的方案。这边选择Storm的原因主要也就是之前接触过,比较熟悉上手比较快。

当然这边我们要需要用到其他的主键:

  • Logstash:主要也就是用来收集日志。这边我们将交易一笔订单记录都会化成json格式输出到日志文件中。之前也考虑过使用Flume,但是Flume没有Logstash来的实时。
  • Kafka:主要是为了接受Logstash传过来的信息,并将它持久化和提供给Storm来使用。说明一下:有些系统会将Kafka放入程序就使用,就是说订单完成时将订单json信息直接发送给Kafka。我们这边多一层Logstash的目的是为了让应用系统和Kafka进行解耦。如果Kafka挂掉或者网络出现问题。不会影响到应用系统的正常运行。
  • Storm:接收Kafka中的信息进行分析计算出想要的数据。
  • MongoDB:主要是为了存储从Storm中分析完的数据。
  • Zookeeper:用来管理Kafka和Storm用的。

在使用这样的架构之前希望大家能理解一下“实时”这个概念:其实无论在什么应用程序中基本没有实时能完成的。只是电脑运行的快,让你误认为是实时的。所以,这边我们还是准实时。

实时理解的图:

mysql

 

1.3. 实时计算架构部署图

mysql

1.4. 架构部署

1.4.1. 环境说明

部署演示使用的是VirtualBox虚拟机,总共启用了5台虚拟机(可以根据自己的机器配置而定,我的配置:i3、12G内存、固态硬盘250G)。

系统应用部署信息

操作系统 IP 部署软件 端口
Centos7.2 10.10.10.11 Logstash  
Kafka 9092
~ 10.10.10.12 MongoDB 27017、27018、27019
~ 10.10.10.21 Zookeeper 2181、3887
Storm  
~ 10.10.10.22 Zookeeper 2181、3887
Storm  
~ 10.10.10.23 Zookeeper 2181、3887
Storm  

这边我就不部署Jetty了,到时候我使用变相的方式来向日志文件中输入json格式数据。

22.4.2. 统一配置

这边5台机子的有统一的hosts文件,并且都需要配置好JDK:

22.4.3. 部署Zookeeper

因为这边我们部署的是Zookeeper集群因此在3台机子上的操作步骤都是一样的:这边我以操作其中一台(10.10.10.21 storm_1)机子为例。

  • 到官网下载软件(zookeeper-3.4.6.tar.gz)
  • 将软件解压到 /usr/local/ 目录下

  • Zookeeper配置文件

如果没有/usr/local/zookeeper-3.4.6/conf/zoo.cfg配置文件则新建一个。

  • 创建相关需要的目录

  • 创建myid文件

下面的命令应该在不同的机器上执行

  • 启动Zookeeper

分表在三台机子上都要执行下面命令

  • 查看Zookeeper状态

  • 客户端链接Zookeeper进行验证

以上就算是部署好了Zookeeper集群了。

22.4.4. 部署Kafka

按照前面规划的我们应该将Kafka部署在(10.10.10.12 normal_12)机子上。

  • 到官网下载Kafka(10-0.9.0.0.tgz)
  • 将Kafka解压到/usr/local目录下,并从命令为kafka

  • 设置Kafka配置文件

 

  • 创建Kafka相关目录

  • 启动Kafka

  • 创建test topic

  • 查看创建的topic

  • 新建一个session,开启Kafka消费者客户端

  • 新建一个session,开启Kafka生产者客户端,并生产一个消息。

在消费者的session中能看到同时也出现了 “this is message 1”这个消息

22.4.5. 部署Logstash

按照前面规划的我们应该将Kafka部署在(10.10.10.12 normal_12)机子上。这边我们使用Logstash监听/tmp/orders.log文件,并且将Kafka作为它的输出。

  • 到官网下载Logstash(logstash-2.3.1.tar.gz)
  • 将Logstash解压到/usr/local/目录下

  • 设置Logstash配置文件

  • 启动Logstash agent

  • 向/tmp/orders.log中输入一个json字符串

再之前启动的Kafka消费者客户端会出现如下消息

22.4.6. 部署MongoDB

这边我们MongoDB部署在(10.10.10.12 normal_12)机子上。并且采用的是复制的形式。

  • 官网下载MongoDB(mongodb-linux-x86_64-rhel70-3.2.5.tgz)
  • 解压MongoDB到/usr/local/目录下

  • 创建MongoDB的相关目录

  • 分别在/u01/mongodb_27017、/u01/mongodb_27018、/u01/mongodb_27019中创建配置文件和启动脚本
  • /u01/mongodb_27017中的配置文件和启动脚本

  • /u01/mongodb_27018中的配置文件和启动脚本

  • /u01/mongodb_27019中的配置文件和启动脚本

  • 启动MongoDB

  • 初始化复制

 

由于篇幅问题《MySQL应用架构优化-实时数据处理(2)》中将将讲述其他环境搭建过程

 

昵称: HH

QQ: 275258836
ttlsa群交流沟通(QQ群②: 6690706 QQ群③: 168085569 QQ群④: 415230207(新) 微信公众号: ttlsacom)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: mysql-connector-java-8.0.19.jar是MySQL官方提供的用于Java语言连接和操作MySQL数据库的驱动程序。它是Java应用程序与MySQL数据库进行通信的桥梁。 这个驱动程序提供了许多功能和方法,使得我们可以在Java应用程序中方便地连接和操作MySQL数据库。它支持与MySQL服务器的连接、数据库的创建与删除、表的创建与删除、数据的插入与查询等常见数据库操作。 使用mysql-connector-java-8.0.19.jar,你可以在Java应用程序中实现与MySQL数据库的连接。你需要通过提供数据库的地址、用户名、密码等连接信息来建立连接。一旦连接成功,你就可以执行SQL语句(如SELECT、INSERT、UPDATE等)来对数据库进行操作。 此外,mysql-connector-java-8.0.19.jar还提供了一些高级功能,如批量插入数据、事务处理、连接池管理等。它的性能也经过了优化,可以高效地处理大量的数据库操作请求。 当你在开发Java应用程序时需要连接和操作MySQL数据库时,可以将mysql-connector-java-8.0.19.jar添加到你的项目中,并在代码中引入相应的类和方法。这样你就可以方便地使用Java语言与MySQL数据库进行交互了。 总之,mysql-connector-java-8.0.19.jar是一个非常重要的Java驱动程序,它为我们提供了连接和操作MySQL数据库的功能,使得我们可以在Java应用程序中轻松地进行数据库操作。 ### 回答2: mysql-connector-java-8.0.19.jar是MySQL数据库的Java驱动程序。它是用Java编写的,用于与MySQL数据库进行交互。这个jar文件允许Java程序通过使用MySQL提供的各种功能来连接、查询和管理数据库。 mysql-connector-java-8.0.19.jar提供了一些重要的特性和功能。首先,它支持与MySQL数据库的连接和断开连接。它提供了连接池,可以管理和重用数据库连接,以提高性能并减少连接时间。它还支持通过SSL进行安全连接,以确保数据传输的安全性。 其次,这个jar文件允许Java程序执行SQL查询和更新数据库。它提供了一组API,用于执行SQL语句,如SELECT、INSERT、UPDATE和DELETE。通过这些API,Java程序可以方便地对数据库进行操作,获取和修改数据。 此外,mysql-connector-java-8.0.19.jar还支持事务处理,确保数据库操作的一致性和完整性。它提供了事务管理API,用于开始、提交和回滚事务。这对于处理复杂的数据库操作和确保数据的一致性非常重要。 最后,mysql-connector-java-8.0.19.jar还提供了对数据库元数据的访问。它允许Java程序获取有关数据库、表和列的信息,如表结构、索引、主键和外键等。这对于动态生成SQL查询和执行数据架构的操作非常有用。 总而言之,mysql-connector-java-8.0.19.jar是一个重要的Java库,用于连接和操作MySQL数据库。它提供了一系列功能和API,方便了Java程序对MySQL数据库的访问和管理。无论是开发Web应用程序还是企业级应用程序,这个jar文件都是不可或缺的。 ### 回答3: mysql-connector-java-8.0.19.jar是MySQL数据库的Java官方驱动程序。它是 MySQL Connector/J 的一个版本,用于在Java应用程序中连接和操作MySQL数据库。 MySQL是一个开源的关系型数据库管理系统。为了在Java应用程序中使用MySQL数据库,需要使用适当的驱动程序来建立连接。mysql-connector-java-8.0.19.jar是一个jar文件,它包含了所有必要的类和方法,用于与MySQL数据库进行通信。 使用mysql-connector-java-8.0.19.jar,开发人员可以通过在Java程序中加载该jar文件来建立与MySQL数据库的连接。连接成功后,可以执行各种操作,如插入、更新、删除和查询数据库中的数据。 该驱动程序还提供了一些附加功能,例如连接池和事务支持。连接池可以提高应用程序的性能,通过缓存数据库连接,使其在需要时可重复使用。事务支持允许开发人员在操作数据库时确保数据的一致性和完整性。 为了使用mysql-connector-java-8.0.19.jar,需要将其添加到Java项目的类路径中。然后,可以在Java代码中导入所需的类,并使用它们来连接和操作MySQL数据库。 总之,mysql-connector-java-8.0.19.jar是一个用于在Java应用程序中连接和操作MySQL数据库的官方驱动程序。它提供了许多有用的功能和方法,使得与MySQL数据库的通信变得简单和方便。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值