Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feature: support the mixed use of different storages of locks and sessions #3575

Merged
merged 22 commits into from
May 5, 2021

Conversation

funky-eyes
Copy link
Contributor

Ⅰ. Describe what this PR did

Ⅱ. Does this pull request fix one issue?

Ⅲ. Why don't you add test cases (unit test/integration test)?

Ⅳ. Describe how to verify it

Ⅴ. Special notes for reviews

@codecov-io
Copy link

codecov-io commented Mar 17, 2021

Codecov Report

Merging #3575 (5ff8cb6) into develop (2dac3a5) will increase coverage by 0.00%.
The diff coverage is 56.66%.

❗ Current head 5ff8cb6 differs from pull request most recent head 14add75. Consider uploading reports for the commit 14add75 to get more accurate results
Impacted file tree graph

@@            Coverage Diff             @@
##             develop    #3575   +/-   ##
==========================================
  Coverage      52.12%   52.13%           
- Complexity      3502     3507    +5     
==========================================
  Files            638      638           
  Lines          21108    21134   +26     
  Branches        2618     2622    +4     
==========================================
+ Hits           11003    11018   +15     
- Misses          9016     9022    +6     
- Partials        1089     1094    +5     
Impacted Files Coverage Δ Complexity Δ
...ava/io/seata/core/constants/ConfigurationKeys.java 0.00% <ø> (ø) 0.00 <0.00> (ø)
server/src/main/java/io/seata/server/Server.java 0.00% <0.00%> (ø) 0.00 <0.00> (ø)
...main/java/io/seata/server/env/ContainerHelper.java 12.50% <0.00%> (-1.79%) 2.00 <0.00> (ø)
...src/main/java/io/seata/server/ParameterParser.java 47.72% <42.85%> (-2.28%) 11.00 <1.00> (+1.00) ⬇️
...in/java/io/seata/server/session/SessionHolder.java 51.90% <60.00%> (-1.27%) 30.00 <2.00> (ø)
...ava/io/seata/server/lock/LockerManagerFactory.java 75.00% <78.57%> (ø) 5.00 <5.00> (+3.00)
...n/src/main/java/io/seata/common/util/IdWorker.java 83.33% <0.00%> (+6.25%) 12.00% <0.00%> (+1.00%)

@funky-eyes funky-eyes added this to the 1.5.0 milestone Mar 18, 2021
@caohdgege
Copy link
Contributor

有关于改动前后的性能测试报告吗?预期会对并发的性能有一定的提升,但是提升幅度大概是?

@funky-eyes
Copy link
Contributor Author

funky-eyes commented Mar 19, 2021

有关于改动前后的性能测试报告吗?预期会对并发的性能有一定的提升,但是提升幅度大概是?

作为未来lock和session库的拆分的前置,未来扩展支持lock单独一个库,session单独一个库,没具体测过性能,我晚上测测看
好处就是,未来可以通过xid,把begin的tc作为发起方调用链下所有rm去注册的tc,那么session就可以完全用file存储,基于内存性能高,外部可以用redis或db存lock,保证隔离性

@funky-eyes
Copy link
Contributor Author

funky-eyes commented Mar 19, 2021

测试demo: https://gitee.com/itCjb/spring-cloud-alibaba-seata-demo/tree/sample/
接口为testCommit
以下是200并发2000请求量 秒杀同一件商品 3个微服务 1个tc
lock.mode=redis session.mode=db

Concurrency Level:      200
Time taken for tests:   105.094 seconds
Complete requests:      2000
Failed requests:        0
Total transferred:      268000 bytes
HTML transferred:       4000 bytes
Requests per second:    19.03 [#/sec] (mean)
Time per request:       10509.449 [ms] (mean)
Time per request:       52.547 [ms] (mean, across all concurrent requests)
Transfer rate:          2.49 [Kbytes/sec] received

lock.mode=db session.mode=redis

Concurrency Level:      200
Time taken for tests:   119.198 seconds
Complete requests:      2000
Failed requests:        0
Total transferred:      268000 bytes
HTML transferred:       4000 bytes
Requests per second:    16.78 [#/sec] (mean)
Time per request:       11919.794 [ms] (mean)
Time per request:       59.599 [ms] (mean, across all concurrent requests)
Transfer rate:          2.20 [Kbytes/sec] received

db all

Concurrency Level:      200
Time taken for tests:   138.111 seconds
Complete requests:      2000
Failed requests:        0
Total transferred:      268000 bytes
HTML transferred:       4000 bytes
Requests per second:    14.48 [#/sec] (mean)
Time per request:       13811.086 [ms] (mean)
Time per request:       69.055 [ms] (mean, across all concurrent requests)
Transfer rate:          1.89 [Kbytes/sec] received

redis all

Concurrency Level:      200
Time taken for tests:   102.015 seconds
Complete requests:      2000
Failed requests:        0
Total transferred:      268000 bytes
HTML transferred:       4000 bytes
Requests per second:    19.61 [#/sec] (mean)
Time per request:       10201.476 [ms] (mean)
Time per request:       51.007 [ms] (mean, across all concurrent requests)
Transfer rate:          2.57 [Kbytes/sec] received

不启用seata:

Concurrency Level:      200
Time taken for tests:   9.244 seconds
Complete requests:      2000
Failed requests:        0
Total transferred:      268000 bytes
HTML transferred:       4000 bytes
Requests per second:    216.35 [#/sec] (mean)
Time per request:       924.409 [ms] (mean)
Time per request:       4.622 [ms] (mean, across all concurrent requests)
Transfer rate:          28.31 [Kbytes/sec] received

以下是200并发2000请求量 随机对100件商品下单 3个微服务 1个tc
redis all

Concurrency Level:      200
Time taken for tests:   26.948 seconds
Complete requests:      2000
Failed requests:        0
Total transferred:      268000 bytes
HTML transferred:       4000 bytes
Requests per second:    74.22 [#/sec] (mean)
Time per request:       2694.772 [ms] (mean)
Time per request:       13.474 [ms] (mean, across all concurrent requests)
Transfer rate:          9.71 [Kbytes/sec] received

db all

Concurrency Level:      200
Time taken for tests:   33.480 seconds
Complete requests:      2000
Failed requests:        0
Total transferred:      268000 bytes
HTML transferred:       4000 bytes
Requests per second:    59.74 [#/sec] (mean)
Time per request:       3348.024 [ms] (mean)
Time per request:       16.740 [ms] (mean, across all concurrent requests)
Transfer rate:          7.82 [Kbytes/sec] received

lock.mode=redis session.mode=db

Concurrency Level:      200
Time taken for tests:   30.880 seconds
Complete requests:      2000
Failed requests:        0
Total transferred:      268000 bytes
HTML transferred:       4000 bytes
Requests per second:    64.77 [#/sec] (mean)
Time per request:       3087.963 [ms] (mean)
Time per request:       15.440 [ms] (mean, across all concurrent requests)
Transfer rate:          8.48 [Kbytes/sec] received

lock.mode=db session.mode=redis

Concurrency Level:      200
Time taken for tests:   35.310 seconds
Complete requests:      2000
Failed requests:        0
Total transferred:      268000 bytes
HTML transferred:       4000 bytes
Requests per second:    56.64 [#/sec] (mean)
Time per request:       3530.951 [ms] (mean)
Time per request:       17.655 [ms] (mean, across all concurrent requests)
Transfer rate:          7.41 [Kbytes/sec] received

不启用seata

Concurrency Level:      200
Time taken for tests:   8.504 seconds
Complete requests:      2000
Failed requests:        0
Total transferred:      268000 bytes
HTML transferred:       4000 bytes
Requests per second:    235.19 [#/sec] (mean)
Time per request:       850.393 [ms] (mean)
Time per request:       4.252 [ms] (mean, across all concurrent requests)
Transfer rate:          30.78 [Kbytes/sec] received

@caohdgege
Copy link
Contributor

这个能否兼容原有的配置形式?

@@ -4,6 +4,14 @@ store {
## store mode: file、db、redis
mode = "file"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is recommended to remove this configuration item, but it is compatible with the program.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok

@funky-eyes
Copy link
Contributor Author

这个能否兼容原有的配置形式?

兼容

Copy link
Member

@slievrly slievrly left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Copy link
Contributor

@caohdgege caohdgege left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@parameter(names = {"--storeMode", "-m"}, description = "log store mode : file, db", order = 3)
这个参数是否需要跟store.session.mode统一?
store.lock.mode是否需要暴露出去?

@funky-eyes
Copy link
Contributor Author

@parameter(names = {"--storeMode", "-m"}, description = "log store mode : file, db", order = 3)
这个参数是否需要跟store.session.mode统一?
store.lock.mode是否需要暴露出去?

有道理,我加一下

@slievrly slievrly removed this from the 1.4.2 milestone Mar 29, 2021
@slievrly slievrly added this to the 1.5.0 milestone Mar 29, 2021
@funky-eyes funky-eyes added module/server server module type: feature Category issues or prs related to feature request. labels Apr 30, 2021
@codecov-commenter
Copy link

codecov-commenter commented May 2, 2021

Codecov Report

Merging #3575 (511b0ac) into develop (f202a07) will decrease coverage by 0.02%.
The diff coverage is 51.42%.

Impacted file tree graph

@@              Coverage Diff              @@
##             develop    #3575      +/-   ##
=============================================
- Coverage      51.70%   51.68%   -0.03%     
- Complexity      3518     3521       +3     
=============================================
  Files            640      640              
  Lines          21391    21420      +29     
  Branches        2670     2675       +5     
=============================================
+ Hits           11060    11070      +10     
- Misses          9229     9241      +12     
- Partials        1102     1109       +7     
Impacted Files Coverage Δ Complexity Δ
...ava/io/seata/core/constants/ConfigurationKeys.java 0.00% <ø> (ø) 0.00 <0.00> (ø)
...e/src/main/java/io/seata/core/store/StoreMode.java 0.00% <0.00%> (ø) 0.00 <0.00> (ø)
server/src/main/java/io/seata/server/Server.java 0.00% <0.00%> (ø) 0.00 <0.00> (ø)
...main/java/io/seata/server/env/ContainerHelper.java 12.50% <0.00%> (-1.79%) 2.00 <0.00> (ø)
...src/main/java/io/seata/server/ParameterParser.java 46.80% <45.45%> (-3.20%) 11.00 <1.00> (+1.00) ⬇️
...ava/io/seata/server/lock/LockerManagerFactory.java 70.58% <73.33%> (-4.42%) 5.00 <5.00> (+3.00) ⬇️
...in/java/io/seata/server/session/SessionHolder.java 53.54% <100.00%> (+0.36%) 30.00 <0.00> (ø)
...n/src/main/java/io/seata/common/util/IdWorker.java 77.08% <0.00%> (-6.25%) 11.00% <0.00%> (-1.00%)

Copy link
Contributor

@caohdgege caohdgege left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Copy link
Member

@xingfudeshi xingfudeshi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM.

@funky-eyes funky-eyes merged commit 7bd0243 into apache:develop May 5, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
module/server server module type: feature Category issues or prs related to feature request.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

6 participants