日志查阅

在2.4出现后台服务器挂掉的情况后,我立即去查看了容器的日志信息,获得了如下日志:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[default-logger][06:16:43][9][info    ][HTTPServer.cpp:415] [消费者获取菜品详情]成功,dish id:D7d33e8b47dda
[default-logger][06:16:43][9][trace ][HTTPServer.cpp:416] {
"dish" : "{\n \"base_price\" : 11.0,\n \"description\" : \"11\",\n \"icon_path\" : \"https://ts3.cn.mm.bing.net/th?id=ORMS.800de0e05f326302bea15ba2e5ff707d&pid=Wdp&w=268&h=140&qlt=90&c=1&rs=1&dpr=1.5&p=0\",\n \"is_delete\" : false,\n \"merchant_id\" : \"Afdaf4ca89c1d\",\n \"merchant_name\" : \"11\",\n \"name\" : \"11\",\n \"price_factor\" : 1.0,\n \"uuid\" : \"D7d33e8b47dda\"\n}"
}
[default-logger][06:16:43][13][debug ][HTTPServer.cpp:496] 收到HTTP请求, method=POST,path=/consumer/order/list
[default-logger][06:16:43][13][debug ][DatabaseClient.cpp:646] 数据库查询消费者订单列表,consumer id: Ae1c45d30139c
[default-logger][06:16:43][13][info ][HTTPServer.cpp:519] [消费者获取订单列表]成功,总数:1
[default-logger][06:16:43][8][debug ][HTTPServer.cpp:496] 收到HTTP请求, method=POST,path=/consumer/order/list
[default-logger][06:16:43][8][debug ][DatabaseClient.cpp:646] 数据库查询消费者订单列表,consumer id: Ae1c45d30139c
[default-logger][06:16:43][8][info ][HTTPServer.cpp:519] [消费者获取订单列表]成功,总数:1
[default-logger][06:16:43][15][debug ][HTTPServer.cpp:496] 收到HTTP请求, method=POST,path=/consumer/order/list
[default-logger][06:16:43][15][debug ][DatabaseClient.cpp:646] 数据库查询消费者订单列表,consumer id: Ae1c45d30139c
[default-logger][06:16:43][14][debug ][HTTPServer.cpp:496] 收到HTTP请求, method=POST,path=/consumer/order/list
[default-logger][06:16:43][12][debug ][HTTPServer.cpp:394] 收到HTTP请求, method=POST,path=/consumer/dish/dishInfo
[default-logger][06:16:43][11][debug ][HTTPServer.cpp:394] 收到HTTP请求, method=POST,path=/consumer/dish/dishInfo
[default-logger][06:16:43][10][debug ][HTTPServer.cpp:496] 收到HTTP请求, method=POST,path=/consumer/order/list
[default-logger][06:16:43][9][debug ][HTTPServer.cpp:496] 收到HTTP请求, method=POST,path=/consumer/order/list
[default-logger][06:16:43][13][debug ][HTTPServer.cpp:496] 收到HTTP请求, method=POST,path=/consumer/order/list
[default-logger][06:16:43][8][debug ][HTTPServer.cpp:394] 收到HTTP请求, method=POST,path=/consumer/dish/dishInfo
[default-logger][06:16:43][15][error ][DatabaseClient.cpp:669] 获取用户订单失败喵!
错误码: 1461
信息:

可以看到,最后数据库客户端抛出了异常并被捕获,然后输出了报错信息,尽管没有显示具体信息,但是给出了错误码1461

经过查询可得,MySQL Connector/C++中错误码1461的意思是:字符串过长错误,尽管我们只执行了查询语句,即select语句,但是由于字符的编码会影响字节长度内存碎片影响字符串长度等一系列不稳定的问题,仍然会造成字符串长度溢出等问题,因此在这个版本中我们要修改优化对数据库的查询。

重新设计表

原本的表为字段设置的长度是刚刚好的,这就导致长度检查十分严格。所以这次重新设计表设置一些冗余长度

  • uuid: varchar(13) -> varchar(32)
  • name: varchar(10) -> varchar(16)

同时为了弥补之前没有主键的严重问题,我们为每一个表都增加了自增主键字段,为什么不用uuid作为主键呢?因为uuid过大,作为主键会使效率大大下降,远不如使用较小的自增主键+uuid新建索引的模式

1
`id` BIGINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,

阶段测试

重新生成数据库后又简单测了一下,还是挂了。

连接池系统改动

可能是由于所有的请求都走的同一个连接对象,尽管每一个函数调用都是有锁保护的,应该不会因为并发访问同一个连接对象导致线程安全问题,但确实会把所有的负载加载到同一个连接对象中,所以我们采用连接池的方式来管理连接对象,并实现池级的负载均衡。