Revert "change fescar to seata"

This commit is contained in:
xingfudeshi 2019-05-17 18:31:44 +08:00 committed by GitHub
parent a3d09120c1
commit 1f894659f5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
134 changed files with 2701 additions and 601 deletions

225
blog/en-us/dubbo-fescar.md Normal file
View File

@ -0,0 +1,225 @@
---
title: How to use Fescar to ensure consistency between Dubbo Microservices
keywords: Dubbo,Fescar,Consistency
description: This article will introduce you how to use Fescar to ensure consistency between Dubbo Microservices.
author: slievrly
date: 2019-03-07
---
# How to use Fescar to ensure consistency between Dubbo Microservices
## Use case
A business logic for user purchasing commodities. The whole business logic is powered by 3 microservices:
- Storage service: deduct storage count on given commodity.
- Order service: create order according to purchase request.
- Account service: debit the balance of user's account.
### Architecture
![Architecture](../../img/blog/fescar/fescar-1.png)
### StorageService
```java
public interface StorageService {
/**
* deduct storage count
*/
void deduct(String commodityCode, int count);
}
```
### OrderService
```java
public interface OrderService {
/**
* create order
*/
Order create(String userId, String commodityCode, int orderCount);
}
```
### AccountService
```java
public interface AccountService {
/**
* debit balance of user's account
*/
void debit(String userId, int money);
}
```
### Main business logic
```java
public class BusinessServiceImpl implements BusinessService {
private StorageService storageService;
private OrderService orderService;
/**
* purchase
*/
public void purchase(String userId, String commodityCode, int orderCount) {
storageService.deduct(commodityCode, orderCount);
orderService.create(userId, commodityCode, orderCount);
}
}
```
```java
public class StorageServiceImpl implements StorageService {
private StorageDAO storageDAO;
@Override
public void deduct(String commodityCode, int count) {
Storage storage = new Storage();
storage.setCount(count);
storage.setCommodityCode(commodityCode);
storageDAO.update(storage);
}
}
```
```java
public class OrderServiceImpl implements OrderService {
private OrderDAO orderDAO;
private AccountService accountService;
public Order create(String userId, String commodityCode, int orderCount) {
int orderMoney = calculate(commodityCode, orderCount);
accountService.debit(userId, orderMoney);
Order order = new Order();
order.userId = userId;
order.commodityCode = commodityCode;
order.count = orderCount;
order.money = orderMoney;
return orderDAO.insert(order);
}
}
```
## Distributed Transaction Solution with Fescar
![undefined](../../img/blog/fescar/fescar-2.png)
We just need an annotation `@GlobalTransactional` on business method:
```java
@GlobalTransactional
public void purchase(String userId, String commodityCode, int orderCount) {
......
}
```
## Example powered by Dubbo + Fescar
### Step 1: Setup database
- Requirement: MySQL with InnoDB engine.
**Note:** In fact, there should be 3 database for the 3 services in the example use case. However, we can just create one database and configure 3 data sources for simple.
Modify Spring XML with the database URL/username/password you just created.
dubbo-account-service.xml
dubbo-order-service.xml
dubbo-storage-service.xml
```xml
<property name="url" value="jdbc:mysql://x.x.x.x:3306/xxx" />
<property name="username" value="xxx" />
<property name="password" value="xxx" />
```
### Step 2: Create UNDO_LOG table for Fescar
`UNDO_LOG` table is required by Fescar AT mode.
```sql
CREATE TABLE `undo_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`branch_id` bigint(20) NOT NULL,
`xid` varchar(100) NOT NULL,
`rollback_info` longblob NOT NULL,
`log_status` int(11) NOT NULL,
`log_created` datetime NOT NULL,
`log_modified` datetime NOT NULL,
`ext` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_unionkey` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=159 DEFAULT CHARSET=utf8
```
### Step 3: Create tables for example business
```sql
DROP TABLE IF EXISTS `storage_tbl`;
CREATE TABLE `storage_tbl` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`commodity_code` varchar(255) DEFAULT NULL,
`count` int(11) DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY (`commodity_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `order_tbl`;
CREATE TABLE `order_tbl` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` varchar(255) DEFAULT NULL,
`commodity_code` varchar(255) DEFAULT NULL,
`count` int(11) DEFAULT 0,
`money` int(11) DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `account_tbl`;
CREATE TABLE `account_tbl` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` varchar(255) DEFAULT NULL,
`money` int(11) DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
```
### Step 4: Start Fescar-Server
- Download server [package](https://github.com/alibaba/fescar/releases), unzip it.
- Start Fescar-Server
```shell
sh fescar-server.sh $LISTEN_PORT $PATH_FOR_PERSISTENT_DATA
e.g.
sh fescar-server.sh 8091 /home/admin/fescar/data/
```
### Step 5: Run example
- Start AccountService ([DubboAccountServiceStarter](https://github.com/fescar-group/fescar-samples/blob/master/dubbo/src/main/java/com/alibaba/fescar/samples/dubbo/starter/DubboAccountServiceStarter.java)).
- Start StorageService ([DubboStorageServiceStarter](https://github.com/fescar-group/fescar-samples/blob/master/dubbo/src/main/java/com/alibaba/fescar/samples/dubbo/starter/DubboStorageServiceStarter.java)).
- Start OrderService ([DubboOrderServiceStarter](https://github.com/fescar-group/fescar-samples/blob/master/dubbo/src/main/java/com/alibaba/fescar/samples/dubbo/starter/DubboOrderServiceStarter.java)).
- Run BusinessService for test ([DubboBusinessTester](https://github.com/fescar-group/fescar-samples/blob/master/dubbo/src/main/java/com/alibaba/fescar/samples/dubbo/starter/DubboBusinessTester.java)).
### Related projects
* fescar: https://github.com/alibaba/fescar/
* fescar-samples : https://github.com/fescar-group/fescar-samples

226
blog/zh-cn/dubbo-fescar.md Normal file
View File

@ -0,0 +1,226 @@
---
title: 如何使用Fescar保证Dubbo微服务间的一致性
keywords: Dubbo,Fescar,一致性
description: 本文主要介绍如何使用Fescar保证Dubbo微服务间的一致性
author: slievrly
date: 2019-03-07
---
# 如何使用Fescar保证Dubbo微服务间的一致性
## 案例
用户采购商品业务整个业务包含3个微服务:
- 库存服务: 扣减给定商品的库存数量。
- 订单服务: 根据采购请求生成订单。
- 账户服务: 用户账户金额扣减。
### 业务结构图
![Architecture](../../img/blog/fescar/fescar-1.png)
### StorageService
```java
public interface StorageService {
/**
* deduct storage count
*/
void deduct(String commodityCode, int count);
}
```
### OrderService
```java
public interface OrderService {
/**
* create order
*/
Order create(String userId, String commodityCode, int orderCount);
}
```
### AccountService
```java
public interface AccountService {
/**
* debit balance of user's account
*/
void debit(String userId, int money);
}
```
### 主要的业务逻辑:
```java
public class BusinessServiceImpl implements BusinessService {
private StorageService storageService;
private OrderService orderService;
/**
* purchase
*/
public void purchase(String userId, String commodityCode, int orderCount) {
storageService.deduct(commodityCode, orderCount);
orderService.create(userId, commodityCode, orderCount);
}
}
```
```java
public class StorageServiceImpl implements StorageService {
private StorageDAO storageDAO;
@Override
public void deduct(String commodityCode, int count) {
Storage storage = new Storage();
storage.setCount(count);
storage.setCommodityCode(commodityCode);
storageDAO.update(storage);
}
}
```
```java
public class OrderServiceImpl implements OrderService {
private OrderDAO orderDAO;
private AccountService accountService;
public Order create(String userId, String commodityCode, int orderCount) {
int orderMoney = calculate(commodityCode, orderCount);
accountService.debit(userId, orderMoney);
Order order = new Order();
order.userId = userId;
order.commodityCode = commodityCode;
order.count = orderCount;
order.money = orderMoney;
return orderDAO.insert(order);
}
}
```
## Fescar 分布式事务解决方案
![undefined](../../img/blog/fescar/fescar-2.png)
此处仅仅需要一行注解 `@GlobalTransactional` 写在业务发起方的方法上:
```java
@GlobalTransactional
public void purchase(String userId, String commodityCode, int orderCount) {
......
}
```
## Dubbo 与 Fescar 结合的例子
### Step 1: 安装数据库
- 要求: MySQL (InnoDB 存储引擎)。
**提示:** 事实上例子中3个微服务需要3个独立的数据库但为了方便我们使用同一物理库并配置3个逻辑连接串。
更改以下xml文件中的数据库url、username和password
dubbo-account-service.xml
dubbo-order-service.xml
dubbo-storage-service.xml
```xml
<property name="url" value="jdbc:mysql://x.x.x.x:3306/xxx" />
<property name="username" value="xxx" />
<property name="password" value="xxx" />
```
### Step 2: 为 Fescar 创建 UNDO_LOG 表
`UNDO_LOG` 此表用于 Fescar 的AT模式。
```sql
CREATE TABLE `undo_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`branch_id` bigint(20) NOT NULL,
`xid` varchar(100) NOT NULL,
`rollback_info` longblob NOT NULL,
`log_status` int(11) NOT NULL,
`log_created` datetime NOT NULL,
`log_modified` datetime NOT NULL,
`ext` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_unionkey` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=159 DEFAULT CHARSET=utf8
```
### Step 3: 创建相关业务表
```sql
DROP TABLE IF EXISTS `storage_tbl`;
CREATE TABLE `storage_tbl` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`commodity_code` varchar(255) DEFAULT NULL,
`count` int(11) DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY (`commodity_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `order_tbl`;
CREATE TABLE `order_tbl` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` varchar(255) DEFAULT NULL,
`commodity_code` varchar(255) DEFAULT NULL,
`count` int(11) DEFAULT 0,
`money` int(11) DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `account_tbl`;
CREATE TABLE `account_tbl` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` varchar(255) DEFAULT NULL,
`money` int(11) DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
```
### Step 4: 启动 Fescar-Server 服务
- 下载Server [package](https://github.com/alibaba/fescar/releases), 并解压。
- 运行bin目录下的启动脚本。
```shell
sh fescar-server.sh $LISTEN_PORT $PATH_FOR_PERSISTENT_DATA
e.g.
sh fescar-server.sh 8091 /home/admin/fescar/data/
```
### Step 5: 运行例子
- 启动账户服务 ([DubboAccountServiceStarter](https://github.com/fescar-group/fescar-samples/blob/master/dubbo/src/main/java/com/alibaba/fescar/samples/dubbo/starter/DubboAccountServiceStarter.java))。
- 启动库存服务 ([DubboStorageServiceStarter](https://github.com/fescar-group/fescar-samples/blob/master/dubbo/src/main/java/com/alibaba/fescar/samples/dubbo/starter/DubboStorageServiceStarter.java))。
- 启动订单服务 ([DubboOrderServiceStarter](https://github.com/fescar-group/fescar-samples/blob/master/dubbo/src/main/java/com/alibaba/fescar/samples/dubbo/starter/DubboOrderServiceStarter.java))。
- 运行BusinessService入口 ([DubboBusinessTester](https://github.com/fescar-group/fescar-samples/blob/master/dubbo/src/main/java/com/alibaba/fescar/samples/dubbo/starter/DubboBusinessTester.java))。
### 相关项目
* fescar: https://github.com/alibaba/fescar/
* fescar-samples : https://github.com/fescar-group/fescar-samples

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,10 +1,10 @@
# dfget
dfget is the client of Seata. You can use the dfget command in the command line tool.
dfget is the client of Fescar. You can use the dfget command in the command line tool.
## Name
dfget - the client of Seata, a non-interactive P2P downloader.
dfget - the client of Fescar, a non-interactive P2P downloader.
## Synopsis

View File

@ -1,10 +1,10 @@
---
title: Seata Maintainers
keywords: Seata, Maintainers
description: A list of Seata maintainers
title: Fescar Maintainers
keywords: Fescar, Maintainers
description: A list of Fescar maintainers
---
# Seata Maintainers
# Fescar Maintainers
| GitHub ID | Name | Email| Company |
|:---:| :----:| :---:|:--:|

View File

@ -2,13 +2,13 @@
Find the answers to the frequently asked questions.
## How can I pull images with Seata?
## How can I pull images with Fescar?
See [Pulling an Image with Seata](quickstart.md).
See [Pulling an Image with Fescar](quickstart.md).
## How can I download files with Seata?
## How can I download files with Fescar?
See [Downloading a File with Seata](quickstart.md).
See [Downloading a File with Fescar](quickstart.md).
## What is a SuperNode?
@ -19,7 +19,7 @@ A SuperNode is a long-time process that plays the following roles:
## What is dfget?
Dfget is the Seata client used for downloading files. It's similar to wget.
Dfget is the Fescar client used for downloading files. It's similar to wget.
Meanwhile, it also plays the role of a peer, which can transfer data between each other in the P2P network.
@ -29,20 +29,20 @@ Dfdaemon is only used for pulling images. It establishes a proxy between dockerd
Dfdaemon filters out layer fetching requests from all requests sent by dockerd/pouchd when pulling images, then uses dfget to download these layers.
## Where is the installation directory of Seata client dfget?
## Where is the installation directory of Fescar client dfget?
Normally, there are two installation directories:
- Seata plugin for StarAgent: `/home/staragent/plugins/dragonfly/dfget`
- Fescar plugin for StarAgent: `/home/staragent/plugins/dragonfly/dfget`
- StarAgent's built-in dfget: `/home/staragent/bin/dfget`
The Seata plugin is used by default. If the Seata plugin is not installed, then the StarAgent's build-in dfget is used.
The Fescar plugin is used by default. If the Fescar plugin is not installed, then the StarAgent's build-in dfget is used.
## Where is the log directory of Seata client dfget?
## Where is the log directory of Fescar client dfget?
The log directory is `$HOME/.small-dragonfly/logs/dfclient.log`.
## Where is the data directory of Seata client dfget?
## Where is the data directory of Fescar client dfget?
The data directory is `$HOME/.small-dragonfly/data`.
@ -51,21 +51,21 @@ Each account has its own data directory. A P2P downloading job generates two dat
- A temporary downloading file for the target file, with the name `targetFileName-sign`. This file is moved to the target directory after the download is complete.
- A copy of the temporary downloading file for uploading, with the name `targetFileName-sign.service`. If no downloading jobs are downloading this file from this node, then it gets cleaned after three minutes. Before the process is completed normally, any file lasting longer than 60 minutes will be purged.
## Where is the meta directory of Seata client dfget?
## Where is the meta directory of Fescar client dfget?
The meta directory is `$HOME/.small-dragonfly/meta`.
This directory caches the address list of the local node (IP, hostname, IDC, security domain, and so on), managing nodes, and supernodes.
When started for the first time, the Seata client will access the managing node. The managing node will retrieve the security domains, IDC, geo-location, and more information of this node by querying armory, and assign the most suitable SuperNode. The managing node also distributes the address lists of all other supernodes. dfget stores the above information in the meta directory on the local drive. When the next job is started, dfget reads the meta information from this directory, avoiding accessing the managing node repeatedly.
When started for the first time, the Fescar client will access the managing node. The managing node will retrieve the security domains, IDC, geo-location, and more information of this node by querying armory, and assign the most suitable SuperNode. The managing node also distributes the address lists of all other supernodes. dfget stores the above information in the meta directory on the local drive. When the next job is started, dfget reads the meta information from this directory, avoiding accessing the managing node repeatedly.
dfget always finds the most suitable assigned node to register. If fails, it requests other supernodes in order. If all fail, then it requests the managing node once again, updates the meta information, and repeats the above steps. If still fails, then the job fails.
**Tip**: If the dfclient.log suggests that the SuperNode registration fails all the time, try delete all files from the meta directory and try again.
## How to check the version of Seata client dfget?
## How to check the version of Fescar client dfget?
If you have installed the Seata client, run this command:
If you have installed the Fescar client, run this command:
```bash
dfget -v
@ -73,11 +73,11 @@ dfget -v
## Why is the dfget process still there after the download is complete?
Because Seata adopts a P2P downloading approach, dfget provides uploading services in addition to downloading services. If there are no new jobs within five minutes, the dfget process will be terminated automatically.
Because Fescar adopts a P2P downloading approach, dfget provides uploading services in addition to downloading services. If there are no new jobs within five minutes, the dfget process will be terminated automatically.
## How to clean up the data directory of Seata?
## How to clean up the data directory of Fescar?
Normally, Seata automatically cleans up files which are not accessed in three minutes from the uploading file list, and the residual files that live longer than one hour from the data directory.
Normally, Fescar automatically cleans up files which are not accessed in three minutes from the uploading file list, and the residual files that live longer than one hour from the data directory.
Follow these steps to clean up the data directory manually:

View File

@ -1,6 +1,6 @@
# Seata Terminology
# Fescar Terminology
This topic lists the common terms used throughout Seata.
This topic lists the common terms used throughout Fescar.
## SuperNode
@ -11,7 +11,7 @@ SuperNode is a long-time process with two primary responsibilities:
## dfget
Dfget is the client of Seata used for downloading files. It's similar to wget.
Dfget is the client of Fescar used for downloading files. It's similar to wget.
At the same time, it also plays the role of peer, which can transfer data between each other in P2P network.

View File

@ -0,0 +1,70 @@
# What Is Fescar?
Fescar is an intelligent P2P-based image and file distribution tool. It aims to improve the efficiency and success rate of file transferring, and maximize the usage of network bandwidth, especially for the distribution of larget amounts of data, such as application distribution, cache distribution, log distribution, and image distribution.
At Alibaba, every month Fescar is invoked two billion times and distributes 3.4PB of data. Fescar has become one of the most important pieces of infrastructure at Alibaba.
While container technologies makes DevOps life easier most of the time, it surely brings some challenges: for example the efficiency of image distribution, especially when you have to replicate image distribution on several hosts.
Fescar works extremely well with both Docker and [PouchContainer](https://github.com/alibaba/pouch) in this scenario. It's also compatible with containers of other formats. It delivers up to 57 times the throughput of native docker and saves up to 99.5% of the out bandwidth of registry.
Fescar makes it simple and cost-effective to set up, operate, and scale any kind of file, image, or data distribution.
## Why Fescar
This project is an open-source version of the Fescar used at Alibaba. It has the following features:
**Note:** More Alibaba-internal features will be made available to open-source users soon. Stay tuned!
- **P2P-based file distribution**: By using the P2P technology for file transmission, it makes the most out of the bandwidth resources of each peer to improve downloading efficiency, and saves a lot of cross-IDC bandwidth, especially the costly cross-board bandwidth.
- **Non-invasive support to all kinds of container technologies**: Fescar can seamlessly support various containers for distributing images.
- **Host level speed limit**: In addition to rate limit for the current download task like many other downloading tools (for example wget and curl), Fescar also provides rate limit for the entire host.
- **Passive CDN**: The CDN mechanism can avoid repetitive remote downloads.
- **Strong consistency**: Fescar can make sure that all downloaded files are consistent even if users do not provide any check code (MD5).
- **Disk protection and highly efficient IO**: Prechecking disk space, delaying synchronization, writing file blocks in the best order, isolating net-read/disk-write, and so on.
- **High performance**: Cluster Manager is completely closed-loop, which means that it doesn't rely on any database or distributed cache, processing requests with extremely high performance.
- **Auto-isolation of Exception**: Fescar will automatically isolate exception nodes (peer or Cluster Manager) to improve download stability.
- **No pressure on file source**: Generally, only a few Cluster Managers will download files from the source.
- **Support standard HTTP header**: Support submitting authentication information through HTTP header.
- **Effective concurrency control of Registry Auth**: Reduce the pressure on the Registry Auth Service.
- **Simple and easy to use**: Very few configurations are needed.
## How Does It Stack Up Against Traditional Solution?
We carried out an experiment to compare the performance of Fescar and wget.
|Test Environment ||
|---|---|
|Fescar Server|2 * (24-Core 64GB-RAM 2000Mb/s)|
|File Source Server|2 * (24-Core 64GB-RAM 2000Mb/s)|
|Client|4-Core 8GB-RAM 200Mb/s|
|Target File Size|200MB|
|Experiment Date|April 20, 2016|
The expeirment result is as shown in the following figure.
![How it stacks up](../img/performance.png)
As you can see in the chart, for Fescar, no matter how many clients are downloading, the average downloading time is always about 12 seconds. But for wget, the downloading time keeps increasing with the number of clients. When the number of wget clients reaches 1,200, the file source crashed and therefore cannot serve any client.
## How Does It Work?
Fescar works slightly differently when downloading general files and downloading container images.
### Downloading General Files
The Cluster Manager is also called a SuperNode, which is responsible for CDN and scheduling every peer to transfer blocks between each other. dfget is the P2P client, which is also called "peer". It's mainly used to download and share blocks.
![Downloading General Files](../img/dfget.png)
### Downloading Container Images
Registry is similar to the file server above. dfget proxy is also called dfdaemon, which intercepts HTTP requests from docker pull or docker push, and then decides which requests to process with dfget.
![Downloading Container Images](../img/dfget-combine-container.png)
### Downloading Blocks
Every file is divided into multiple blocks, which are transmitted between peers. Each peer is a P2P client. Cluster Manager will check if the corresponding file exists in the local disk. If not, it will be downloaded into Cluster Manager from file server.
![How file blocks are downloaded](../img/distributing.png)

View File

@ -1,6 +1,6 @@
# Seata Quick Start
# Fescar Quick Start
In this quick start guide, you will get a feeling of Seata by starting a [SuperNode](overview/terminology.md) (the server) in your Docker container, installing the Seata client (the client), and then downloading a container image and a general file, which are likely what you'll be doing frequently in your use case.
In this quick start guide, you will get a feeling of Fescar by starting a [SuperNode](overview/terminology.md) (the server) in your Docker container, installing the Fescar client (the client), and then downloading a container image and a general file, which are likely what you'll be doing frequently in your use case.
## Prerequisites
@ -35,9 +35,9 @@ docker pull registry.cn-hangzhou.aliyuncs.com/alidragonfly/supernode:0.2.0
docker run -d -p 8001:8001 -p 8002:8002 registry.cn-hangzhou.aliyuncs.com/alidragonfly/supernode:0.2.0
```
## Step 2: Installing Seata Client
## Step 2: Installing Fescar Client
You have two options of installing Seata client: installing from source code, or installing by pulling the image.
You have two options of installing Fescar client: installing from source code, or installing by pulling the image.
### Option 1: Installing from Source Code
@ -59,9 +59,9 @@ You have two options of installing Seata client: installing from source code, or
- If you're not in China:
- [Linux 64-bit](https://github.com/dragonflyoss/Seata/releases/download/v0.2.0/df-client_0.2.0_linux_amd64.tar.gz): `https://github.com/dragonflyoss/Seata/releases/download/v0.2.0/df-client_0.2.0_linux_amd64.tar.gz`
- [Linux 64-bit](https://github.com/dragonflyoss/Fescar/releases/download/v0.2.0/df-client_0.2.0_linux_amd64.tar.gz): `https://github.com/dragonflyoss/Fescar/releases/download/v0.2.0/df-client_0.2.0_linux_amd64.tar.gz`
- [MacOS 64-bit](https://github.com/dragonflyoss/Seata/releases/download/v0.2.0/df-client_0.2.0_darwin_amd64.tar.gz): `https://github.com/dragonflyoss/Seata/releases/download/v0.2.0/df-client_0.2.0_darwin_amd64.tar.gz`
- [MacOS 64-bit](https://github.com/dragonflyoss/Fescar/releases/download/v0.2.0/df-client_0.2.0_darwin_amd64.tar.gz): `https://github.com/dragonflyoss/Fescar/releases/download/v0.2.0/df-client_0.2.0_darwin_amd64.tar.gz`
2. Unzip the package.
@ -125,19 +125,19 @@ export PATH=$PATH:$HOME/df-client/
## Step 3: Downloading Images or Files
Now that you have started your SuperNode, and installed Seata client, you can start downloading images or general files, both of which are supported by Seata, but with slightly different downloading methods.
Now that you have started your SuperNode, and installed Fescar client, you can start downloading images or general files, both of which are supported by Fescar, but with slightly different downloading methods.
### Use Case 1: Downloading a General File with Seata
### Use Case 1: Downloading a General File with Fescar
Once you have installed the Seata client, you can use the `dfget` command to download a file.
Once you have installed the Fescar client, you can use the `dfget` command to download a file.
```bash
dfget -u 'https://github.com/dragonflyoss/Seata/blob/master/docs/images/logo.png' -o /tmp/logo.png
dfget -u 'https://github.com/dragonflyoss/Fescar/blob/master/docs/images/logo.png' -o /tmp/logo.png
```
**Tip:** For more information on the dfget command, see [dfget](cli_ref/dfget.md).
### Use Case 2: Pulling an Image with Seata
### Use Case 2: Pulling an Image with Fescar
1. Start `dfdaemon` with a specified registry, such as `https://index.docker.io`.
@ -157,7 +157,7 @@ dfget -u 'https://github.com/dragonflyoss/Seata/blob/master/docs/images/logo.png
systemctl restart docker
```
4. Download an image with Seata.
4. Download an image with Fescar.
```bash
docker pull nginx:latest

View File

@ -1,6 +1,6 @@
# Downloading Files with Seata
# Downloading Files with Fescar
Things are done differently when you download container images and download general files with Seata.
Things are done differently when you download container images and download general files with Fescar.
## Prerequisites
@ -14,7 +14,7 @@ Things are done differently when you download container images and download gene
1. Specify the supernodes.
a. Open the Seata configuration file.
a. Open the Fescar configuration file.
```sh
vi /etc/dragonfly.conf
@ -60,7 +60,7 @@ Things are done differently when you download container images and download gene
systemctl restart docker
```
4. Download an image with Seata.
4. Download an image with Fescar.
```bash
docker pull {imageName}
@ -75,7 +75,7 @@ Things are done differently when you download container images and download gene
- Specifying with the configuration file.
```sh
# Open the Seata configuration file.
# Open the Fescar configuration file.
vi /etc/dragonfly.conf
# Add the IP of supernodes separated by comma to the configuration file
@ -91,7 +91,7 @@ Things are done differently when you download container images and download gene
**Note:** When using this method, you must add the `node` parameter every time when you run the dfget command. And the parameter in the command line takes precedence over the configuration file.
2. Download general files with Seata in one of the following ways.
2. Download general files with Fescar in one of the following ways.
- Download files with the default `/etc/dragonfly.conf` configuration.

View File

@ -1,6 +1,6 @@
# Installing Seata Client
# Installing Fescar Client
You have three options when installing the Seata client: installing from the latest package, installing by pulling the image, or installing from the source code.
You have three options when installing the Fescar client: installing from the latest package, installing by pulling the image, or installing from the source code.
## Installing from the Latest Package
@ -24,9 +24,9 @@ You can install from the latest packages we provided.
- If you're not in China:
- [Linux 64-bit](https://github.com/dragonflyoss/Seata/releases/download/v0.2.0/df-client_0.2.0_linux_amd64.tar.gz): `https://github.com/dragonflyoss/Seata/releases/download/v0.2.0/df-client_0.2.0_linux_amd64.tar.gz`
- [Linux 64-bit](https://github.com/dragonflyoss/Fescar/releases/download/v0.2.0/df-client_0.2.0_linux_amd64.tar.gz): `https://github.com/dragonflyoss/Fescar/releases/download/v0.2.0/df-client_0.2.0_linux_amd64.tar.gz`
- [MacOS 64-bit](https://github.com/dragonflyoss/Seata/releases/download/v0.2.0/df-client_0.2.0_darwin_amd64.tar.gz): `https://github.com/dragonflyoss/Seata/releases/download/v0.2.0/df-client_0.2.0_darwin_amd64.tar.gz`
- [MacOS 64-bit](https://github.com/dragonflyoss/Fescar/releases/download/v0.2.0/df-client_0.2.0_darwin_amd64.tar.gz): `https://github.com/dragonflyoss/Fescar/releases/download/v0.2.0/df-client_0.2.0_darwin_amd64.tar.gz`
2. Unzip the package.
@ -87,16 +87,16 @@ You can also install from the source code.
### Installing in $HOME/.dragonfly
1. Obtain the source code of Seata.
1. Obtain the source code of Fescar.
```sh
git clone https://github.com/dragonflyoss/Seata.git
git clone https://github.com/dragonflyoss/Fescar.git
```
2. Enter the target directory.
```sh
cd Seata
cd Fescar
```
3. Install `dfdaemon` and `dfget` in `$HOME/.dragonfly/df-client`.
@ -114,16 +114,16 @@ You can also install from the source code.
### Installing in Another Directory
1. Obtain the source code of Seata.
1. Obtain the source code of Fescar.
```sh
git clone https://github.com/dragonflyoss/Seata.git
git clone https://github.com/dragonflyoss/Fescar.git
```
2. Enter the target directory.
```sh
cd Seata/build/client
cd Fescar/build/client
```
3. Install the client.

View File

@ -1,12 +1,12 @@
# Installing Seata Server
# Installing Fescar Server
This topic explains how to install the Seata server.
This topic explains how to install the Fescar server.
**Tip:** For a data center or a cluster, we recommend that you use at least two machines with eight cores, 16GB RAM and Gigabit Ethernet connections for deploying supernodes.
## Context
There are two layers in Seatas architecture: server (supernodes) and client (hosts). Install the supernodes in one of the following ways:
There are two layers in Fescars architecture: server (supernodes) and client (hosts). Install the supernodes in one of the following ways:
- Deploying with Docker: Recommended for quick local deployment and test.
- Deploying with physical machines: Recommended for production usage.
@ -31,16 +31,16 @@ Nginx|0.8+
## Procedure - When Deploying with Docker
1. Obtain the source code of Seata.
1. Obtain the source code of Fescar.
```sh
git clone https://github.com/dragonflyoss/Seata.git
git clone https://github.com/dragonflyoss/Fescar.git
```
2. Enter the project directory.
```sh
cd Seata
cd Fescar
```
3. Build the Docker image.
@ -64,16 +64,16 @@ Nginx|0.8+
## Procedure - When Deploying with Physical Machines
1. Obtain the source code of Seata.
1. Obtain the source code of Fescar.
```sh
git clone https://github.com/dragonflyoss/Seata.git
git clone https://github.com/dragonflyoss/Fescar.git
```
2. Enter the project directory.
```sh
cd Seata/src/supernode
cd Fescar/src/supernode
```
3. Compile the source code.
@ -127,7 +127,7 @@ Nginx|0.8+
telent 127.0.0.1 8002
```
- Install the Seata client and test if the downloading works.
- Install the Fescar client and test if the downloading works.
```sh
dfget --url "http://${resourceUrl}" --output ./resource.png --node "127.0.0.1"

View File

@ -1,4 +1,4 @@
# Seata SuperNode Configuration
# Fescar SuperNode Configuration
The SuperNode is written in Java based on Spring Boot. You can easily set properties with command line parameters or with the configuration file.

View File

@ -0,0 +1,205 @@
# Fescar AT 模式
## 前提
- 基于支持本地 ACID 事务的关系型数据库。
- Java 应用,通过 JDBC 访问数据库。
## 整体机制
两阶段提交协议的演变:
- 一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。
- 二阶段:
- 提交异步化,非常快速地完成。
- 回滚通过一阶段的回滚日志进行反向补偿。
# 写隔离
- 一阶段本地事务提交前,需要确保先拿到 **全局锁**
- 拿不到 **全局锁** ,不能提交本地事务。
- 拿 **全局锁** 的尝试被限制在一定范围内,超出范围将放弃,并回滚本地事务,释放本地锁。
以一个示例来说明:
两个全局事务 tx1 和 tx2分别对 a 表的 m 字段进行更新操作m 的初始值 1000。
tx1 先开始,开启本地事务,拿到本地锁,更新操作 m = 1000 - 100 = 900。本地事务提交前先拿到该记录的 **全局锁** ,本地提交释放本地锁。
tx2 后开始,开启本地事务,拿到本地锁,更新操作 m = 900 - 100 = 800。本地事务提交前尝试拿该记录的 **全局锁** tx1 全局提交前,该记录的全局锁被 tx1 持有tx2 需要重试等待 **全局锁**
![Write-Isolation: Commit](https://upload-images.jianshu.io/upload_images/4420767-90b8bf0388953ee8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
tx1 二阶段全局提交,释放 **全局锁** 。tx2 拿到 **全局锁** 提交本地事务。
![Write-Isolation: Rollback](https://upload-images.jianshu.io/upload_images/4420767-434090412a6a07b8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
如果 tx1 的二阶段全局回滚,则 tx1 需要重新获取该数据的本地锁,进行反向补偿的更新操作,实现分支的回滚。
此时,如果 tx2 仍在等待该数据的 **全局锁**,同时持有本地锁,则 tx1 的分支回滚会失败。分支的回滚会一直重试,直到 tx2 的 **全局锁** 等锁超时,放弃 **全局锁** 并回滚本地事务释放本地锁tx1 的分支回滚最终成功。
因为整个过程 **全局锁** 在 tx1 结束前一直是被 tx1 持有的,所以不会发生 **脏写** 的问题。
# 读隔离
在数据库本地事务隔离级别 **读已提交Read Committed** 或以上的基础上FescarAT 模式)的默认全局隔离级别是 **读未提交Read Uncommitted**
如果应用在特定场景下,必需要求全局的 **读已提交** ,目前 Fescar 的方式是通过 SELECT FOR UPDATE 语句的代理。
![Read Isolation: SELECT FOR UPDATE](https://upload-images.jianshu.io/upload_images/4420767-6236f075d02c5e34.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
SELECT FOR UPDATE 语句的执行会申请 **全局锁** ,如果 **全局锁** 被其他事务持有,则释放本地锁(回滚 SELECT FOR UPDATE 语句的本地执行)并重试。这个过程中,查询是被 block 住的,直到 **全局锁** 拿到,即读取的相关数据是 **已提交** 的,才返回。
出于总体性能上的考虑Fescar 目前的方案并没有对所有 SELECT 语句都进行代理,仅针对 FOR UPDATE 的 SELECT 语句。
# 工作机制
以一个示例来说明整个 AT 分支的工作过程。
业务表:`product`
| Field | Type | Key|
|---------------|--------------|----|
| id | bigint(20) |PRI |
| name | varchar(100) | |
| since | varchar(100) | |
AT 分支事务的业务逻辑:
```sql
update product set name = 'GTS' where name = 'TXC';
```
## 一阶段
过程:
1. 解析 SQL得到 SQL 的类型UPDATEproduct条件where name = 'TXC')等相关的信息。
2. 查询前镜像:根据解析得到的条件信息,生成查询语句,定位数据。
```sql
select id, name, since from product where name = 'TXC';
```
得到前镜像:
|id|name|since|
|---|---|---|
|1|TXC|2014|
3. 执行业务 SQL更新这条记录的 name 为 'GTS'。
4. 查询后镜像:根据前镜像的结果,通过 **主键** 定位数据。
```sql
select id, name, since from product where id = 1`;
```
得到后镜像:
|id|name|since|
|---|---|---|
|1|GTS|2014|
5. 插入回滚日志:把前后镜像数据以及业务 SQL 相关的信息组成一条回滚日志记录,插入到 `UNDO_LOG` 表中。
```json
{
"branchId": 641789253,
"undoItems": [{
"afterImage": {
"rows": [{
"fields": [{
"name": "id",
"type": 4,
"value": 1
}, {
"name": "name",
"type": 12,
"value": "GTS"
}, {
"name": "since",
"type": 12,
"value": "2014"
}]
}],
"tableName": "product"
},
"beforeImage": {
"rows": [{
"fields": [{
"name": "id",
"type": 4,
"value": 1
}, {
"name": "name",
"type": 12,
"value": "TXC"
}, {
"name": "since",
"type": 12,
"value": "2014"
}]
}],
"tableName": "product"
},
"sqlType": "UPDATE"
}],
"xid": "xid:xxx"
}
```
6. 提交前,向 TC 注册分支:申请 `product` 表中,主键值等于 1 的记录的 **全局锁**
7. 本地事务提交:业务数据的更新和前面步骤中生成的 UNDO LOG 一并提交。
8. 将本地事务提交的结果上报给 TC。
## 二阶段-回滚
1. 收到 TC 的分支回滚请求,开启一个本地事务,执行如下操作。
2. 通过 XID 和 Branch ID 查找到相应的 UNDO LOG 记录。
3. 数据校验:拿 UNDO LOG 中的后镜与当前数据进行比较,如果有不同,说明数据被当前全局事务之外的动作做了修改。这种情况,需要根据配置策略来做处理,详细的说明在另外的文档中介绍。
4. 根据 UNDO LOG 中的前镜像和业务 SQL 的相关信息生成并执行回滚的语句:
```sql
update product set name = 'TXC' where id = 1;
```
5. 提交本地事务。并把本地事务的执行结果(即分支事务回滚的结果)上报给 TC。
## 二阶段-提交
1. 收到 TC 的分支提交请求,把请求放入一个异步任务的队列中,马上返回提交成功的结果给 TC。
2. 异步任务阶段的分支提交请求将异步和批量地删除相应 UNDO LOG 记录。
# 附录
## 回滚日志表
UNDO_LOG Table不同数据库在类型上会略有差别。
以 MySQL 为例:
| Field | Type |
|---------------|--------------|
| branch_id | bigint PK|
| xid | varchar(100) |
| rollback_info | longblob |
| log_status | tinyint |
| log_created | datetime |
| log_modified | datetime |
| ext | varchar(100) |
```sql
-- 注意此处0.3.0+ 增加唯一索引 ux_undo_log
CREATE TABLE `undo_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`branch_id` bigint(20) NOT NULL,
`xid` varchar(100) NOT NULL,
`rollback_info` longblob NOT NULL,
`log_status` int(11) NOT NULL,
`log_created` datetime NOT NULL,
`log_modified` datetime NOT NULL,
`ext` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
```

View File

@ -0,0 +1,132 @@
### Metrics
#### 设计思路
1. Fescar作为一个被集成的数据一致性框架Metrics模块将尽可能少的使用第三方依赖以降低发生冲突的风险
2. Metrics模块将竭力争取更高的度量性能和更低的资源开销尽可能降低开启后带来的副作用
3. 插件式——Metrics是否激活、数据如何发布去取决于是否引入了对应的依赖例如在TC Server中引入`fescar-metrics-prometheus`,则自动启用并将度量数据发布到[Prometheus](https://github.com/prometheus)
4. 不使用Spring使用SPI(Service Provider Interface)加载扩展;
5. 初始仅发布核心Transaction相关指标之后结合社区的需求逐步完善运维方面的所有其他指标。
#### 模块说明
由1个核心API模块`fescar-metrics-api`和N个对接实现模块如`fescar-metrics-prometheus`构成:
- fescar-metrics-api模块
此模块是Metrics的核心将作为Fescar基础架构的一部分被TC、TM和RM引用它内部**没有任何具体实现代码**,仅包含接口定义,定义的内容包括:
1. Meter类接口`Gauge`、`Counter`、`Timer`...
2. 注册容器接口`Registry`
3. Measurement发布接口`Publisher`
>提示Metrics本身在开源领域也已有很多实现例如
>1. [Netflix-Spectator](https://github.com/Netflix/spectator)
>2. [Dropwizard-Metrics](https://github.com/dropwizard/metrics)
>3. [Dubbo-Metrics](https://github.com/dubbo/dubbo-metrics)
>它们有的轻而敏捷,有的重而强大,由于也是“实现”,因此不会纳入`fescar-metrics-api`中,避免实现绑定。
- fescar-metrics-prometheus模块
这是我们默认提供的Metrics实现不使用其它Metrics开源实现并轻量级的实现了以下三个Meter
| Meter类型 | 描述 |
| --------- | ------------------------------------------------------------ |
| Gauge | 单一最新值度量器 |
| Counter | 单一累加度量器,可增可减 |
| Summary | 多Measurement输出计数器将输出`total`(合计)、`count`(计数)、`max`(最大)、`average`(合计/计数)和`tps`(合计/时间间隔),无单位 |
| Timer | 多Measurement输出计时器将输出`total`(合计)、`count`(计数)、`max`(最大)和`average`(合计/计数),支持微秒为单位累计 |
>说明:
>1. 未来可能增加更丰富复杂的度量器例如Histogram这是一种可以本地统计聚合75th, 90th, 95th, 98th, 99th,99.9th...的度量器,适合某些场合,但需要更多内存。
>2. 所有的计量器都将继承自Meter所有的计量器执行measure()方法后都将归一化的生成1或N个Measurement结果。
它也会实现一个内存的Registry和PrometheusExporter将度量数据同步给Prometheus。
>说明不同的监控系统采集度量数据的方式不尽相同例如Zabbix支持用zabbix-agent推送Prometheus则推荐使用prometheus-server[拉取](https://prometheus.io/docs/practices/pushing/)的方式;同样数据交换协议也不同,因此往往需要逐一适配。
#### 如何使用
##### 引入依赖
如果需要开启TC的Metrics只需要在`fescar-server`的pom中增加
```xml
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>fescar-core</artifactId>
</dependency>
<!--导入依赖启用Metrics-->
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>fescar-metrics-prometheus</artifactId>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
```
之后启动TC即可在`http://tc-server-ip:9898/metrics`上获取到Metrics的文本格式数据。
>提示:默认使用`9898`端口Prometheus已登记的端口列表[在此](https://github.com/prometheus/prometheus/wiki/Default-port-allocations),如果想更换端口,可通过`metrics.exporter.prometheus.port`配置修改。
##### 下载并启动Prometheus
下载完毕后修改Prometheus的配置文件`prometheus.yml`,在`scrape_configs`中增加一项抓取Fescar的度量数据
```yaml
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
- job_name: 'fescar'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['tc-server-ip:9898']
```
##### 查看数据输出
推荐结合配置[Grafana](https://prometheus.io/docs/visualization/grafana/)获得更好的查询效果初期Fescar导出的Metrics包括
- TC :
| Metrics | 描述 |
| ------ | --------- |
| fescar.transaction(role=tc,meter=counter,status=active/committed/rollback) | 当前活动中/已提交/已回滚的事务总数 |
| fescar.transaction(role=tc,meter=summary,statistic=count,status=committed/rollback) | 当前周期内提交/回滚的事务数 |
| fescar.transaction(role=tc,meter=summary,statistic=tps,status=committed/rollback) | 当前周期内提交/回滚的事务TPS(transaction per second) |
| fescar.transaction(role=tc,meter=timer,statistic=total,status=committed/rollback) | 当前周期内提交/回滚的事务耗时总和 |
| fescar.transaction(role=tc,meter=timer,statistic=count,status=committed/rollback) | 当前周期内提交/回滚的事务数 |
| fescar.transaction(role=tc,meter=timer,statistic=average,status=committed/rollback) | 当前周期内提交/回滚的事务平均耗时 |
| fescar.transaction(role=tc,meter=timer,statistic=max,status=committed/rollback) | 当前周期内提交/回滚的事务最大耗时 |
>提示fescar.transaction(role=tc,meter=summary,statistic=count,status=committed/rollback)和fescar.transaction(role=tc,meter=timer,statistic=count,status=committed/rollback)的值可能相同,但它们来源于两个不同的度量器。
- TM
稍后实现,包括诸如:
fescar.transaction(role=tm,name={GlobalTransactionalName},meter=counter,status=active/committed/rollback) : 以GlobalTransactionalName为维度区分不同Transactional的状态。
- RM
稍后实现,包括诸如:
fescar.transaction(role=rm,name={BranchTransactionalName},mode=at/mt,meter=counter,status=active/committed/rollback)以BranchTransactionalName为维度以及AT/MT维度区分不同分支Transactional的状态。
#### 如何扩展
如果有下面几种情况:
1. 您不是使用Prometheus作为运维监控系统但希望能够将Fescar的Metrics数据集成进Dashboard中
2. 您需要更复杂强大的度量器类型这些度量器在其他Metrics实现库中已有希望集成这些第三方依赖直接使用
3. 您需要改变默认Metric的Measurement输出例如在Timer中增加一个`min`或`sd`(方差)
4. ...
那么需要自行扩展Metrics的实现请创建新的模块项目例如`fescar-metrics-xxxx`,之后:
- 针对1您需要实现新的Exporter
- 针对2您可以改变默认Registry的实现返回第三方的Meter计量器实现
- 针对3您可以修改对应Meter的实现包括`measure()`方法返回的Measurement列表。

View File

@ -0,0 +1,26 @@
# Fescar TCC 模式
回顾总览中的描述:一个分布式的全局事务,整体是 **两阶段提交** 的模型。全局事务是由若干分支事务组成的,分支事务要满足 **两阶段提交** 的模型要求,即需要每个分支事务都具备自己的:
- 一阶段 prepare 行为
- 二阶段 commit 或 rollback 行为
![Overview of a global transaction](https://upload-images.jianshu.io/upload_images/4420767-e48f0284a037d1df.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
根据两阶段行为模式的不同,我们将分支事务划分为 **Automatic (Branch) Transaction Mode****TCC (Branch) Transaction Mode**.
AT 模式([参考链接 TBD]())基于 **支持本地 ACID 事务****关系型数据库**
- 一阶段 prepare 行为:在本地事务中,一并提交业务数据更新和相应回滚日志记录。
- 二阶段 commit 行为:马上成功结束,**自动** 异步批量清理回滚日志。
- 二阶段 rollback 行为:通过回滚日志,**自动** 生成补偿操作,完成数据回滚。
相应的TCC 模式,不依赖于底层数据资源的事务支持:
- 一阶段 prepare 行为:调用 **自定义** 的 prepare 逻辑。
- 二阶段 commit 行为:调用 **自定义** 的 commit 逻辑。
- 二阶段 rollback 行为:调用 **自定义** 的 rollback 逻辑。
所谓 TCC 模式,是指支持把 **自定义** 的分支事务纳入到全局事务的管理中。

View File

@ -1,10 +1,10 @@
# dfget
dfget is the client of Seata. You can use the dfget command in the command line tool.
dfget is the client of Fescar. You can use the dfget command in the command line tool.
## Name
dfget - the client of Seata, a non-interactive P2P downloader.
dfget - the client of Fescar, a non-interactive P2P downloader.
## Synopsis

View File

@ -1,10 +1,10 @@
---
title: Seata 维护者
keywords: Seata, 维护者
description: Seata 维护者名单
title: Fescar 维护者
keywords: Fescar, 维护者
description: Fescar 维护者名单
---
# Seata 维护者
# Fescar 维护者
| GitHub ID | 姓名 | 邮箱 | 公司 |
|:---:| :----:| :---:|:--:|

View File

@ -1,30 +1,30 @@
# 运维指南
## Metrics配置指南
Seata支持在TC、TM和RM三个角色开启Metrics数据采集并输出到Prometheus监控系统中。
Fescar支持在TC、TM和RM三个角色开启Metrics数据采集并输出到Prometheus监控系统中。
### 在TC中配置开启Metrics
#### 步骤一:在Seata Server中增加Metrics的依赖并重新编译Server
打开Seata Server源代码的[pom](https://github.com/alibaba/seata/blob/develop/server/pom.xml)添加Metrics依赖
#### 步骤一:在Fescar Server中增加Metrics的依赖并重新编译Server
打开Fescar Server源代码的[pom](https://github.com/alibaba/fescar/blob/develop/server/pom.xml)添加Metrics依赖
```xml
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>seata-metrics-prometheus</artifactId>
<artifactId>fescar-metrics-prometheus</artifactId>
</dependency>
```
重新编译Server启动输入`http://tc-server-ip:9898/metrics`即可获得最新的Metrics数据例如
```
# HELP seata seata
# TYPE seata untyped
seata_transaction{meter="counter",role="tc",status="committed",} 1358.0 1551946035372
seata_transaction{meter="counter",role="tc",status="active",} 0.0 1551946035372
seata_transaction{meter="summary",role="tc",statistic="count",status="committed",} 6.0 1551946035372
seata_transaction{meter="summary",role="tc",statistic="total",status="committed",} 6.0 1551946035372
seata_transaction{meter="summary",role="tc",statistic="tps",status="committed",} 1.6163793103448276 1551946035372
seata_transaction{meter="timer",role="tc",statistic="count",status="committed",} 6.0 1551946035372
seata_transaction{meter="timer",role="tc",statistic="total",status="committed",} 910.0 1551946035372
seata_transaction{meter="timer",role="tc",statistic="max",status="committed",} 164.0 1551946035372
seata_transaction{meter="timer",role="tc",statistic="average",status="committed",} 151.66666666666666 1551946035372
# HELP fescar fescar
# TYPE fescar untyped
fescar_transaction{meter="counter",role="tc",status="committed",} 1358.0 1551946035372
fescar_transaction{meter="counter",role="tc",status="active",} 0.0 1551946035372
fescar_transaction{meter="summary",role="tc",statistic="count",status="committed",} 6.0 1551946035372
fescar_transaction{meter="summary",role="tc",statistic="total",status="committed",} 6.0 1551946035372
fescar_transaction{meter="summary",role="tc",statistic="tps",status="committed",} 1.6163793103448276 1551946035372
fescar_transaction{meter="timer",role="tc",statistic="count",status="committed",} 6.0 1551946035372
fescar_transaction{meter="timer",role="tc",statistic="total",status="committed",} 910.0 1551946035372
fescar_transaction{meter="timer",role="tc",statistic="max",status="committed",} 164.0 1551946035372
fescar_transaction{meter="timer",role="tc",statistic="average",status="committed",} 151.66666666666666 1551946035372
```
>提示:
@ -32,7 +32,7 @@ seata_transaction{meter="timer",role="tc",statistic="average",status="committed"
>2. 如果某些Transaction状态没有发生例如rollback那么对应的Metrics指标也不会存在输出
#### 步骤二修改Prometheus配置文件并启动Prometheus
打开Prometheus的配置文件`prometheus.yml`,在`scrape_configs`中增加一项抓取Seata TC的Metrics数据
打开Prometheus的配置文件`prometheus.yml`,在`scrape_configs`中增加一项抓取Fescar TC的Metrics数据
```yaml
scrape_configs:
@ -45,7 +45,7 @@ scrape_configs:
static_configs:
- targets: ['localhost:9090']
- job_name: 'seata'
- job_name: 'fescar'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
@ -54,8 +54,8 @@ scrape_configs:
- targets: ['tc-server-ip:9898']
```
#### 步骤三在Prometheus UI或Grafana中查看Seata TC的Metrics
在浏览器中打开Prometheus UI`http://localhost:9090/graph`,选择`seata_transaction`,点击查询,即可获取到最新数据:
#### 步骤三在Prometheus UI或Grafana中查看Fescar TC的Metrics
在浏览器中打开Prometheus UI`http://localhost:9090/graph`,选择`fescar_transaction`,点击查询,即可获取到最新数据:
![tc-prometheus](../img/tc-prometheus.png)

View File

@ -0,0 +1,237 @@
# 什么是 Fescar?
Fescar 是一款开源的分布式事务解决方案致力于提供高性能和简单易用的分布式事务服务。Fescar 将为用户提供了 AT、TCC 和 XA 事务模式,为用户打造一站式的分布式解决方案。
# AT 模式
## 前提
- 基于支持本地 ACID 事务的关系型数据库。
- Java 应用,通过 JDBC 访问数据库。
## 整体机制
两阶段提交协议的演变:
- 一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。
- 二阶段:
- 提交异步化,非常快速地完成。
- 回滚通过一阶段的回滚日志进行反向补偿。
# 写隔离
- 一阶段本地事务提交前,需要确保先拿到 **全局锁**
- 拿不到 **全局锁** ,不能提交本地事务。
- 拿 **全局锁** 的尝试被限制在一定范围内,超出范围将放弃,并回滚本地事务,释放本地锁。
以一个示例来说明:
两个全局事务 tx1 和 tx2分别对 a 表的 m 字段进行更新操作m 的初始值 1000。
tx1 先开始,开启本地事务,拿到本地锁,更新操作 m = 1000 - 100 = 900。本地事务提交前先拿到该记录的 **全局锁** ,本地提交释放本地锁。
tx2 后开始,开启本地事务,拿到本地锁,更新操作 m = 900 - 100 = 800。本地事务提交前尝试拿该记录的 **全局锁** tx1 全局提交前,该记录的全局锁被 tx1 持有tx2 需要重试等待 **全局锁**
![Write-Isolation: Commit](https://upload-images.jianshu.io/upload_images/4420767-90b8bf0388953ee8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
tx1 二阶段全局提交,释放 **全局锁** 。tx2 拿到 **全局锁** 提交本地事务。
![Write-Isolation: Rollback](https://upload-images.jianshu.io/upload_images/4420767-434090412a6a07b8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
如果 tx1 的二阶段全局回滚,则 tx1 需要重新获取该数据的本地锁,进行反向补偿的更新操作,实现分支的回滚。
此时,如果 tx2 仍在等待该数据的 **全局锁**,同时持有本地锁,则 tx1 的分支回滚会失败。分支的回滚会一直重试,直到 tx2 的 **全局锁** 等锁超时,放弃 **全局锁** 并回滚本地事务释放本地锁tx1 的分支回滚最终成功。
因为整个过程 **全局锁** 在 tx1 结束前一直是被 tx1 持有的,所以不会发生 **脏写** 的问题。
# 读隔离
在数据库本地事务隔离级别 **读已提交Read Committed** 或以上的基础上FescarAT 模式)的默认全局隔离级别是 **读未提交Read Uncommitted**
如果应用在特定场景下,必需要求全局的 **读已提交** ,目前 Fescar 的方式是通过 SELECT FOR UPDATE 语句的代理。
![Read Isolation: SELECT FOR UPDATE](https://upload-images.jianshu.io/upload_images/4420767-6236f075d02c5e34.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
SELECT FOR UPDATE 语句的执行会申请 **全局锁** ,如果 **全局锁** 被其他事务持有,则释放本地锁(回滚 SELECT FOR UPDATE 语句的本地执行)并重试。这个过程中,查询是被 block 住的,直到 **全局锁** 拿到,即读取的相关数据是 **已提交** 的,才返回。
出于总体性能上的考虑Fescar 目前的方案并没有对所有 SELECT 语句都进行代理,仅针对 FOR UPDATE 的 SELECT 语句。
# 工作机制
以一个示例来说明整个 AT 分支的工作过程。
业务表:`product`
| Field | Type | Key|
|---------------|--------------|----|
| id | bigint(20) |PRI |
| name | varchar(100) | |
| since | varchar(100) | |
AT 分支事务的业务逻辑:
```sql
update product set name = 'GTS' where name = 'TXC';
```
## 一阶段
过程:
1. 解析 SQL得到 SQL 的类型UPDATEproduct条件where name = 'TXC')等相关的信息。
2. 查询前镜像:根据解析得到的条件信息,生成查询语句,定位数据。
```sql
select id, name, since from product where name = 'TXC';
```
得到前镜像:
|id|name|since|
|---|---|---|
|1|TXC|2014|
3. 执行业务 SQL更新这条记录的 name 为 'GTS'。
4. 查询后镜像:根据前镜像的结果,通过 **主键** 定位数据。
```sql
select id, name, since from product where id = 1`;
```
得到后镜像:
|id|name|since|
|---|---|---|
|1|GTS|2014|
5. 插入回滚日志:把前后镜像数据以及业务 SQL 相关的信息组成一条回滚日志记录,插入到 `UNDO_LOG` 表中。
```json
{
"branchId": 641789253,
"undoItems": [{
"afterImage": {
"rows": [{
"fields": [{
"name": "id",
"type": 4,
"value": 1
}, {
"name": "name",
"type": 12,
"value": "GTS"
}, {
"name": "since",
"type": 12,
"value": "2014"
}]
}],
"tableName": "product"
},
"beforeImage": {
"rows": [{
"fields": [{
"name": "id",
"type": 4,
"value": 1
}, {
"name": "name",
"type": 12,
"value": "TXC"
}, {
"name": "since",
"type": 12,
"value": "2014"
}]
}],
"tableName": "product"
},
"sqlType": "UPDATE"
}],
"xid": "xid:xxx"
}
```
6. 提交前,向 TC 注册分支:申请 `product` 表中,主键值等于 1 的记录的 **全局锁**
7. 本地事务提交:业务数据的更新和前面步骤中生成的 UNDO LOG 一并提交。
8. 将本地事务提交的结果上报给 TC。
## 二阶段-回滚
1. 收到 TC 的分支回滚请求,开启一个本地事务,执行如下操作。
2. 通过 XID 和 Branch ID 查找到相应的 UNDO LOG 记录。
3. 数据校验:拿 UNDO LOG 中的后镜与当前数据进行比较,如果有不同,说明数据被当前全局事务之外的动作做了修改。这种情况,需要根据配置策略来做处理,详细的说明在另外的文档中介绍。
4. 根据 UNDO LOG 中的前镜像和业务 SQL 的相关信息生成并执行回滚的语句:
```sql
update product set name = 'TXC' where id = 1;
```
5. 提交本地事务。并把本地事务的执行结果(即分支事务回滚的结果)上报给 TC。
## 二阶段-提交
1. 收到 TC 的分支提交请求,把请求放入一个异步任务的队列中,马上返回提交成功的结果给 TC。
2. 异步任务阶段的分支提交请求将异步和批量地删除相应 UNDO LOG 记录。
# 附录
## 回滚日志表
UNDO_LOG Table不同数据库在类型上会略有差别。
以 MySQL 为例:
| Field | Type |
|---------------|--------------|
| branch_id | bigint PK|
| xid | varchar(100) |
| rollback_info | longblob |
| log_status | tinyint |
| log_created | datetime |
| log_modified | datetime |
| ext | varchar(100) |
```sql
-- 注意此处0.3.0+ 增加唯一索引 ux_undo_log
CREATE TABLE `undo_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`branch_id` bigint(20) NOT NULL,
`xid` varchar(100) NOT NULL,
`rollback_info` longblob NOT NULL,
`log_status` int(11) NOT NULL,
`log_created` datetime NOT NULL,
`log_modified` datetime NOT NULL,
`ext` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
```
# TCC 模式
回顾总览中的描述:一个分布式的全局事务,整体是 **两阶段提交** 的模型。全局事务是由若干分支事务组成的,分支事务要满足 **两阶段提交** 的模型要求,即需要每个分支事务都具备自己的:
- 一阶段 prepare 行为
- 二阶段 commit 或 rollback 行为
![Overview of a global transaction](https://upload-images.jianshu.io/upload_images/4420767-e48f0284a037d1df.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
根据两阶段行为模式的不同,我们将分支事务划分为 **Automatic (Branch) Transaction Mode****Manual (Branch) Transaction Mode**.
AT 模式([参考链接 TBD]())基于 **支持本地 ACID 事务****关系型数据库**
- 一阶段 prepare 行为:在本地事务中,一并提交业务数据更新和相应回滚日志记录。
- 二阶段 commit 行为:马上成功结束,**自动** 异步批量清理回滚日志。
- 二阶段 rollback 行为:通过回滚日志,**自动** 生成补偿操作,完成数据回滚。
相应的TCC 模式,不依赖于底层数据资源的事务支持:
- 一阶段 prepare 行为:调用 **自定义** 的 prepare 逻辑。
- 二阶段 commit 行为:调用 **自定义** 的 commit 逻辑。
- 二阶段 rollback 行为:调用 **自定义** 的 rollback 逻辑。
所谓 TCC 模式,是指支持把 **自定义** 的分支事务纳入到全局事务的管理中。

View File

@ -1,6 +1,6 @@
# 1. 概述
Seata API 分为两大类High-Level API 和 Low-Level API
Fescar API 分为两大类High-Level API 和 Low-Level API
- **High-Level API** :用于事务边界定义、控制及事务状态查询。
- **Low-Level API** :用于控制事务上下文的传播。

View File

@ -3,12 +3,12 @@ pages:
home:
# 首页配置
zh-cn:
title: 'Seata'
title: 'Fescar'
keywords: '关键词1关键词2'
description: '页面内容简介'
# home config
en-us:
title: 'Seata'
title: 'Fescar'
keywords: 'keyword1,keyword2'
description: 'page description'
community:

View File

@ -14,7 +14,7 @@
<body>
<div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/en-us/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1iqPwCkPoK1RjSZKbXXX1IXXa-292-72.png"/></a><span class="language-switch language-switch-normal"></span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/en-us/index.html" target="_self">HOME</a></li><li class="menu-item menu-item-normal"><a href="/en-us/docs/overview/what_is_dragonfly.html" target="_self">DOCS</a></li><li class="menu-item menu-item-normal"><a href="/en-us/blog/client.html" target="_self">CLIENT</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/en-us/blog/index.html" target="_self">BLOG</a></li><li class="menu-item menu-item-normal"><a href="/en-us/community/index.html" target="_self">COMMUNITY</a></li><li class="menu-item menu-item-normal"><a href="/en-us/blog/download.html" target="_self">DOWNLOAD</a></li></ul></div></div></header><section class="blog-content markdown-body"><h2>Client page</h2>
<p>Content</p>
</section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1JOLlCgDqK1RjSZSyXXaxEVXa-292-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Seata is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_dragonfly.html" target="_self">What is Seata?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Seata</span></div></div></footer></div></div>
</section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1JOLlCgDqK1RjSZSyXXaxEVXa-292-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Fescar is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_dragonfly.html" target="_self">What is Fescar?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Fescar</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>

View File

@ -14,7 +14,7 @@
<body>
<div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/en-us/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1iqPwCkPoK1RjSZKbXXX1IXXa-292-72.png"/></a><span class="language-switch language-switch-normal"></span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/en-us/index.html" target="_self">HOME</a></li><li class="menu-item menu-item-normal"><a href="/en-us/docs/overview/what_is_dragonfly.html" target="_self">DOCS</a></li><li class="menu-item menu-item-normal"><a href="/en-us/blog/client.html" target="_self">CLIENT</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/en-us/blog/index.html" target="_self">BLOG</a></li><li class="menu-item menu-item-normal"><a href="/en-us/community/index.html" target="_self">COMMUNITY</a></li><li class="menu-item menu-item-normal"><a href="/en-us/blog/download.html" target="_self">DOWNLOAD</a></li></ul></div></div></header><section class="blog-content markdown-body"><h2>Download page</h2>
<p>Content</p>
</section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1JOLlCgDqK1RjSZSyXXaxEVXa-292-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Seata is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_dragonfly.html" target="_self">What is Seata?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Seata</span></div></div></footer></div></div>
</section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1JOLlCgDqK1RjSZSyXXaxEVXa-292-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Fescar is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_dragonfly.html" target="_self">What is Fescar?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Fescar</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>

View File

@ -0,0 +1,205 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<meta name="keywords" content="Dubbo,Fescar,Consistency" />
<meta name="description" content="This article will introduce you how to use Fescar to ensure consistency between Dubbo Microservices." />
<!-- 网页标签标题 -->
<title>How to use Fescar to ensure consistency between Dubbo Microservices</title>
<link rel="shortcut icon" href="https://img.alicdn.com/tfs/TB1O1p6JzTpK1RjSZKPXXa3UpXa-64-64.png"/>
<link rel="stylesheet" href="/build/blogDetail.css" />
</head>
<body>
<div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/en-us/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal"></span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/en-us/index.html" target="_self">HOME</a></li><li class="menu-item menu-item-normal"><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">DOCS</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/en-us/blog/index.html" target="_self">BLOG</a></li><li class="menu-item menu-item-normal"><a href="/en-us/community/index.html" target="_self">COMMUNITY</a></li></ul></div></div></header><section class="blog-content markdown-body"><h1>How to use Fescar to ensure consistency between Dubbo Microservices</h1>
<h2>Use case</h2>
<p>A business logic for user purchasing commodities. The whole business logic is powered by 3 microservices:</p>
<ul>
<li>Storage service: deduct storage count on given commodity.</li>
<li>Order service: create order according to purchase request.</li>
<li>Account service: debit the balance of user's account.</li>
</ul>
<h3>Architecture</h3>
<p><img src="../../img/blog/fescar/fescar-1.png" alt="Architecture"></p>
<h3>StorageService</h3>
<pre><code class="language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">StorageService</span> </span>{
<span class="hljs-comment">/**
* deduct storage count
*/</span>
<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">deduct</span><span class="hljs-params">(String commodityCode, <span class="hljs-keyword">int</span> count)</span></span>;
}
</code></pre>
<h3>OrderService</h3>
<pre><code class="language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">OrderService</span> </span>{
<span class="hljs-comment">/**
* create order
*/</span>
<span class="hljs-function">Order <span class="hljs-title">create</span><span class="hljs-params">(String userId, String commodityCode, <span class="hljs-keyword">int</span> orderCount)</span></span>;
}
</code></pre>
<h3>AccountService</h3>
<pre><code class="language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">AccountService</span> </span>{
<span class="hljs-comment">/**
* debit balance of user's account
*/</span>
<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">debit</span><span class="hljs-params">(String userId, <span class="hljs-keyword">int</span> money)</span></span>;
}
</code></pre>
<h3>Main business logic</h3>
<pre><code class="language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">BusinessServiceImpl</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">BusinessService</span> </span>{
<span class="hljs-keyword">private</span> StorageService storageService;
<span class="hljs-keyword">private</span> OrderService orderService;
<span class="hljs-comment">/**
* purchase
*/</span>
<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">purchase</span><span class="hljs-params">(String userId, String commodityCode, <span class="hljs-keyword">int</span> orderCount)</span> </span>{
storageService.deduct(commodityCode, orderCount);
orderService.create(userId, commodityCode, orderCount);
}
}
</code></pre>
<pre><code class="language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">StorageServiceImpl</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">StorageService</span> </span>{
<span class="hljs-keyword">private</span> StorageDAO storageDAO;
<span class="hljs-meta">@Override</span>
<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">deduct</span><span class="hljs-params">(String commodityCode, <span class="hljs-keyword">int</span> count)</span> </span>{
Storage storage = <span class="hljs-keyword">new</span> Storage();
storage.setCount(count);
storage.setCommodityCode(commodityCode);
storageDAO.update(storage);
}
}
</code></pre>
<pre><code class="language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">OrderServiceImpl</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">OrderService</span> </span>{
<span class="hljs-keyword">private</span> OrderDAO orderDAO;
<span class="hljs-keyword">private</span> AccountService accountService;
<span class="hljs-function"><span class="hljs-keyword">public</span> Order <span class="hljs-title">create</span><span class="hljs-params">(String userId, String commodityCode, <span class="hljs-keyword">int</span> orderCount)</span> </span>{
<span class="hljs-keyword">int</span> orderMoney = calculate(commodityCode, orderCount);
accountService.debit(userId, orderMoney);
Order order = <span class="hljs-keyword">new</span> Order();
order.userId = userId;
order.commodityCode = commodityCode;
order.count = orderCount;
order.money = orderMoney;
<span class="hljs-keyword">return</span> orderDAO.insert(order);
}
}
</code></pre>
<h2>Distributed Transaction Solution with Fescar</h2>
<p><img src="../../img/blog/fescar/fescar-2.png" alt="undefined"></p>
<p>We just need an annotation <code>@GlobalTransactional</code> on business method:</p>
<pre><code class="language-java">
<span class="hljs-meta">@GlobalTransactional</span>
<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">purchase</span><span class="hljs-params">(String userId, String commodityCode, <span class="hljs-keyword">int</span> orderCount)</span> </span>{
......
}
</code></pre>
<h2>Example powered by Dubbo + Fescar</h2>
<h3>Step 1: Setup database</h3>
<ul>
<li>Requirement: MySQL with InnoDB engine.</li>
</ul>
<p><strong>Note:</strong> In fact, there should be 3 database for the 3 services in the example use case. However, we can just create one database and configure 3 data sources for simple.</p>
<p>Modify Spring XML with the database URL/username/password you just created.</p>
<p>dubbo-account-service.xml
dubbo-order-service.xml
dubbo-storage-service.xml</p>
<pre><code class="language-xml"> <span class="hljs-tag">&lt;<span class="hljs-name">property</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"url"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"jdbc:mysql://x.x.x.x:3306/xxx"</span> /&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">property</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"username"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"xxx"</span> /&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">property</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"password"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"xxx"</span> /&gt;</span>
</code></pre>
<h3>Step 2: Create UNDO_LOG table for Fescar</h3>
<p><code>UNDO_LOG</code> table is required by Fescar AT mode.</p>
<pre><code class="language-sql"><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> <span class="hljs-string">`undo_log`</span> (
<span class="hljs-string">`id`</span> <span class="hljs-built_in">bigint</span>(<span class="hljs-number">20</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> AUTO_INCREMENT,
<span class="hljs-string">`branch_id`</span> <span class="hljs-built_in">bigint</span>(<span class="hljs-number">20</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>,
<span class="hljs-string">`xid`</span> <span class="hljs-built_in">varchar</span>(<span class="hljs-number">100</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>,
<span class="hljs-string">`rollback_info`</span> longblob <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>,
<span class="hljs-string">`log_status`</span> <span class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>,
<span class="hljs-string">`log_created`</span> datetime <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>,
<span class="hljs-string">`log_modified`</span> datetime <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>,
<span class="hljs-string">`ext`</span> <span class="hljs-built_in">varchar</span>(<span class="hljs-number">100</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>,
PRIMARY <span class="hljs-keyword">KEY</span> (<span class="hljs-string">`id`</span>),
<span class="hljs-keyword">KEY</span> <span class="hljs-string">`idx_unionkey`</span> (<span class="hljs-string">`xid`</span>,<span class="hljs-string">`branch_id`</span>)
) <span class="hljs-keyword">ENGINE</span>=<span class="hljs-keyword">InnoDB</span> AUTO_INCREMENT=<span class="hljs-number">159</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">CHARSET</span>=utf8
</code></pre>
<h3>Step 3: Create tables for example business</h3>
<pre><code class="language-sql">
<span class="hljs-keyword">DROP</span> <span class="hljs-keyword">TABLE</span> <span class="hljs-keyword">IF</span> <span class="hljs-keyword">EXISTS</span> <span class="hljs-string">`storage_tbl`</span>;
<span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> <span class="hljs-string">`storage_tbl`</span> (
<span class="hljs-string">`id`</span> <span class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> AUTO_INCREMENT,
<span class="hljs-string">`commodity_code`</span> <span class="hljs-built_in">varchar</span>(<span class="hljs-number">255</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>,
<span class="hljs-string">`count`</span> <span class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-number">0</span>,
PRIMARY <span class="hljs-keyword">KEY</span> (<span class="hljs-string">`id`</span>),
<span class="hljs-keyword">UNIQUE</span> <span class="hljs-keyword">KEY</span> (<span class="hljs-string">`commodity_code`</span>)
) <span class="hljs-keyword">ENGINE</span>=<span class="hljs-keyword">InnoDB</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">CHARSET</span>=utf8;
<span class="hljs-keyword">DROP</span> <span class="hljs-keyword">TABLE</span> <span class="hljs-keyword">IF</span> <span class="hljs-keyword">EXISTS</span> <span class="hljs-string">`order_tbl`</span>;
<span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> <span class="hljs-string">`order_tbl`</span> (
<span class="hljs-string">`id`</span> <span class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> AUTO_INCREMENT,
<span class="hljs-string">`user_id`</span> <span class="hljs-built_in">varchar</span>(<span class="hljs-number">255</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>,
<span class="hljs-string">`commodity_code`</span> <span class="hljs-built_in">varchar</span>(<span class="hljs-number">255</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>,
<span class="hljs-string">`count`</span> <span class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-number">0</span>,
<span class="hljs-string">`money`</span> <span class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-number">0</span>,
PRIMARY <span class="hljs-keyword">KEY</span> (<span class="hljs-string">`id`</span>)
) <span class="hljs-keyword">ENGINE</span>=<span class="hljs-keyword">InnoDB</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">CHARSET</span>=utf8;
<span class="hljs-keyword">DROP</span> <span class="hljs-keyword">TABLE</span> <span class="hljs-keyword">IF</span> <span class="hljs-keyword">EXISTS</span> <span class="hljs-string">`account_tbl`</span>;
<span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> <span class="hljs-string">`account_tbl`</span> (
<span class="hljs-string">`id`</span> <span class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> AUTO_INCREMENT,
<span class="hljs-string">`user_id`</span> <span class="hljs-built_in">varchar</span>(<span class="hljs-number">255</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>,
<span class="hljs-string">`money`</span> <span class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-number">0</span>,
PRIMARY <span class="hljs-keyword">KEY</span> (<span class="hljs-string">`id`</span>)
) <span class="hljs-keyword">ENGINE</span>=<span class="hljs-keyword">InnoDB</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">CHARSET</span>=utf8;
</code></pre>
<h3>Step 4: Start Fescar-Server</h3>
<ul>
<li>Download server <a href="https://github.com/alibaba/fescar/releases">package</a>, unzip it.</li>
<li>Start Fescar-Server</li>
</ul>
<pre><code class="language-shell">sh fescar-server.sh $LISTEN_PORT $PATH_FOR_PERSISTENT_DATA
e.g.
sh fescar-server.sh 8091 /home/admin/fescar/data/
</code></pre>
<h3>Step 5: Run example</h3>
<ul>
<li>Start AccountService (<a href="https://github.com/fescar-group/fescar-samples/blob/master/dubbo/src/main/java/com/alibaba/fescar/samples/dubbo/starter/DubboAccountServiceStarter.java">DubboAccountServiceStarter</a>).</li>
<li>Start StorageService (<a href="https://github.com/fescar-group/fescar-samples/blob/master/dubbo/src/main/java/com/alibaba/fescar/samples/dubbo/starter/DubboStorageServiceStarter.java">DubboStorageServiceStarter</a>).</li>
<li>Start OrderService (<a href="https://github.com/fescar-group/fescar-samples/blob/master/dubbo/src/main/java/com/alibaba/fescar/samples/dubbo/starter/DubboOrderServiceStarter.java">DubboOrderServiceStarter</a>).</li>
<li>Run BusinessService for test (<a href="https://github.com/fescar-group/fescar-samples/blob/master/dubbo/src/main/java/com/alibaba/fescar/samples/dubbo/starter/DubboBusinessTester.java">DubboBusinessTester</a>).</li>
</ul>
<h3>Related projects</h3>
<ul>
<li>fescar: <a href="https://github.com/alibaba/fescar/">https://github.com/alibaba/fescar/</a></li>
<li>fescar-samples : <a href="https://github.com/fescar-group/fescar-samples">https://github.com/fescar-group/fescar-samples</a></li>
</ul>
</section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Fescar is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">What is Fescar?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Fescar</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>
window.rootPath = '';
</script>
<script src="/build/blogDetail.js"></script>
</body>
</html>

File diff suppressed because one or more lines are too long

View File

@ -12,9 +12,9 @@
<link rel="stylesheet" href="/build/blogDetail.css" />
</head>
<body>
<div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/en-us/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal"></span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/en-us/index.html" target="_self">HOME</a></li><li class="menu-item menu-item-normal"><a href="/en-us/docs/overview/what_is_seata.html" target="_self">DOCS</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/en-us/blog/index.html" target="_self">BLOG</a></li><li class="menu-item menu-item-normal"><a href="/en-us/community/index.html" target="_self">COMMUNITY</a></li></ul></div></div></header><section class="blog-content markdown-body"><h1>blog1</h1>
<div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/en-us/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal"></span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/en-us/index.html" target="_self">HOME</a></li><li class="menu-item menu-item-normal"><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">DOCS</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/en-us/blog/index.html" target="_self">BLOG</a></li><li class="menu-item menu-item-normal"><a href="/en-us/community/index.html" target="_self">COMMUNITY</a></li></ul></div></div></header><section class="blog-content markdown-body"><h1>blog1</h1>
<p>it supports the resolution of meta datathe text between <code>---</code>(at least three<code>-</code>)written in the format of <code>key:value</code>will be resolved to <code>md_json/blog.json</code><code>filename</code> and <code>__html</code> are preserved.</p>
</section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Seata is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_seata.html" target="_self">What is Seata?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Seata</span></div></div></footer></div></div>
</section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Fescar is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">What is Fescar?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Fescar</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>

View File

@ -12,7 +12,7 @@
<link rel="stylesheet" href="/build/blog.css" />
</head>
<body>
<div id="root"><div class="blog-list-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/en-us/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal"></span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/en-us/index.html" target="_self">HOME</a></li><li class="menu-item menu-item-normal"><a href="/en-us/docs/overview/what_is_seata.html" target="_self">DOCS</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/en-us/blog/index.html" target="_self">BLOG</a></li><li class="menu-item menu-item-normal"><a href="/en-us/community/index.html" target="_self">COMMUNITY</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1gQ8uJyrpK1RjSZFhXXXSdXXa-160-160.png" class="front-img"/><span>Blog</span><img src="https://img.alicdn.com/tfs/TB1gQ8uJyrpK1RjSZFhXXXSdXXa-160-160.png" class="back-img"/></div></div><section class="blog-container"><div class="col col-18 left-part"><div class="page-slider"><div class="slider-list" style="transform:translateX(-0px);transition:transform 500ms ease;width:0"><div class="slider-page" style="width:0"><div class="slider-item"><a href="\en-us\blog\dubbo-seata.html" target="_self" class="blog-item"><div class="title"><img src="https://img.alicdn.com/tfs/TB1OkBRukzoK1RjSZFlXXai4VXa-32-40.png"/><span>How to use Seata to ensure consistency between Dubbo Microservices</span></div><div class="brief-info"><span class="author">slievrly</span><span class="date">2019-03-07</span></div><p>This article will introduce you how to use Seata to ensure consistency between Dubbo Microservices.</p></a></div></div></div><div class="slider-control"><img class="slider-control-prev slider-control-prev-hidden" src="/img/system/prev.png"/><img class="slider-control-next slider-control-next-hidden" src="/img/system/next.png"/></div></div></div><div class="col col-6 right-part"><h4>All posts</h4><ul><li><a href="\en-us\blog\dubbo-seata.html" target="_self"><span>2019-03-07<!-- -->  </span><span>How to use Seata to ensure consistency between Dubbo Microservices</span></a></li></ul></div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Seata is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_seata.html" target="_self">What is Seata?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Seata</span></div></div></footer></div></div>
<div id="root"><div class="blog-list-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/en-us/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal"></span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/en-us/index.html" target="_self">HOME</a></li><li class="menu-item menu-item-normal"><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">DOCS</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/en-us/blog/index.html" target="_self">BLOG</a></li><li class="menu-item menu-item-normal"><a href="/en-us/community/index.html" target="_self">COMMUNITY</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1gQ8uJyrpK1RjSZFhXXXSdXXa-160-160.png" class="front-img"/><span>Blog</span><img src="https://img.alicdn.com/tfs/TB1gQ8uJyrpK1RjSZFhXXXSdXXa-160-160.png" class="back-img"/></div></div><section class="blog-container"><div class="col col-18 left-part"><div class="page-slider"><div class="slider-list" style="transform:translateX(-0px);transition:transform 500ms ease;width:0"><div class="slider-page" style="width:0"><div class="slider-item"><a href="/en-us/blog/dubbo-fescar.html" target="_self" class="blog-item"><div class="title"><img src="https://img.alicdn.com/tfs/TB1OkBRukzoK1RjSZFlXXai4VXa-32-40.png"/><span>How to use Fescar to ensure consistency between Dubbo Microservices</span></div><div class="brief-info"><span class="author">slievrly</span><span class="date">2019-03-07</span></div><p>This article will introduce you how to use Fescar to ensure consistency between Dubbo Microservices.</p></a></div></div></div><div class="slider-control"><img class="slider-control-prev slider-control-prev-hidden" src="/img/system/prev.png"/><img class="slider-control-next slider-control-next-hidden" src="/img/system/next.png"/></div></div></div><div class="col col-6 right-part"><h4>All posts</h4><ul><li><a href="/en-us/blog/dubbo-fescar.html" target="_self"><span>2019-03-07<!-- -->  </span><span>How to use Fescar to ensure consistency between Dubbo Microservices</span></a></li></ul></div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Fescar is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">What is Fescar?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Fescar</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>

File diff suppressed because one or more lines are too long

View File

@ -12,7 +12,7 @@
<link rel="stylesheet" href="/build/documentation.css" />
</head>
<body>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/en-us/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal"></span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/en-us/index.html" target="_self">HOME</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/en-us/docs/overview/what_is_seata.html" target="_self">DOCS</a></li><li class="menu-item menu-item-normal"><a href="/en-us/blog/index.html" target="_self">BLOG</a></li><li class="menu-item menu-item-normal"><a href="/en-us/community/index.html" target="_self">COMMUNITY</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>Documentation</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Seata</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>Overview<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/what_is_seata.html" target="_self">What is Seata?</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/terminology.html" target="_self">Terminology</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></li><li style="height:180px;overflow:hidden" class="menu-item menu-item-level-2"><span>User Guide<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_server.html" target="_self">Installing Server</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_client.html" target="_self">Installing Client</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/download_files.html" target="_self">Downloading Files</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/supernode_configuration.html" target="_self">Supernode Configuration</a></li></ul></li><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>CLI Reference<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfdaemon.html" target="_self">dfdaemon</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfget.html" target="_self">dfget</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/api.html" target="_self">API Reference</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/faq.html" target="_self">FAQ</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>APIs Provided by SuperNode</h1>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/en-us/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal"></span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/en-us/index.html" target="_self">HOME</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">DOCS</a></li><li class="menu-item menu-item-normal"><a href="/en-us/blog/index.html" target="_self">BLOG</a></li><li class="menu-item menu-item-normal"><a href="/en-us/community/index.html" target="_self">COMMUNITY</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>Documentation</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Fescar</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>Overview<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">What is Fescar?</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/terminology.html" target="_self">Terminology</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></li><li style="height:180px;overflow:hidden" class="menu-item menu-item-level-2"><span>User Guide<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_server.html" target="_self">Installing Server</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_client.html" target="_self">Installing Client</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/download_files.html" target="_self">Downloading Files</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/supernode_configuration.html" target="_self">Supernode Configuration</a></li></ul></li><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>CLI Reference<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfdaemon.html" target="_self">dfdaemon</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfget.html" target="_self">dfget</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/api.html" target="_self">API Reference</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/faq.html" target="_self">FAQ</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>APIs Provided by SuperNode</h1>
<p>This topic explains how to use the APIs provided by the <a href="overview/terminology.md">SuperNode</a> (the cluster manager).</p>
<h2>Registration</h2>
<pre><code>POST /peer/registry
@ -262,7 +262,7 @@
<span class="hljs-attr">"msg"</span>: <span class="hljs-string">"success"</span>
}
</code></pre>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Seata is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_seata.html" target="_self">What is Seata?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Seata</span></div></div></footer></div></div>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Fescar is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">What is Fescar?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Fescar</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>

File diff suppressed because one or more lines are too long

View File

@ -12,7 +12,7 @@
<link rel="stylesheet" href="/build/documentation.css" />
</head>
<body>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/en-us/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal"></span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/en-us/index.html" target="_self">HOME</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/en-us/docs/overview/what_is_seata.html" target="_self">DOCS</a></li><li class="menu-item menu-item-normal"><a href="/en-us/blog/index.html" target="_self">BLOG</a></li><li class="menu-item menu-item-normal"><a href="/en-us/community/index.html" target="_self">COMMUNITY</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>Documentation</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Seata</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>Overview<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/what_is_seata.html" target="_self">What is Seata?</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/terminology.html" target="_self">Terminology</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></li><li style="height:180px;overflow:hidden" class="menu-item menu-item-level-2"><span>User Guide<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_server.html" target="_self">Installing Server</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_client.html" target="_self">Installing Client</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/download_files.html" target="_self">Downloading Files</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/supernode_configuration.html" target="_self">Supernode Configuration</a></li></ul></li><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>CLI Reference<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfdaemon.html" target="_self">dfdaemon</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfget.html" target="_self">dfget</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/api.html" target="_self">API Reference</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/faq.html" target="_self">FAQ</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>dfdaemon</h1>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/en-us/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal"></span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/en-us/index.html" target="_self">HOME</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">DOCS</a></li><li class="menu-item menu-item-normal"><a href="/en-us/blog/index.html" target="_self">BLOG</a></li><li class="menu-item menu-item-normal"><a href="/en-us/community/index.html" target="_self">COMMUNITY</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>Documentation</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Fescar</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>Overview<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">What is Fescar?</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/terminology.html" target="_self">Terminology</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></li><li style="height:180px;overflow:hidden" class="menu-item menu-item-level-2"><span>User Guide<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_server.html" target="_self">Installing Server</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_client.html" target="_self">Installing Client</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/download_files.html" target="_self">Downloading Files</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/supernode_configuration.html" target="_self">Supernode Configuration</a></li></ul></li><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>CLI Reference<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfdaemon.html" target="_self">dfdaemon</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfget.html" target="_self">dfget</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/api.html" target="_self">API Reference</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/faq.html" target="_self">FAQ</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>dfdaemon</h1>
<p>dfdaemon is a proxy between pouchd/dockerd and registry used for pulling images. You can use the dfdaemon command in the command line tool.</p>
<h2>Name</h2>
<p>dfdaemon - a proxy between pouchd/dockerd and registry used for pulling images.</p>
@ -53,7 +53,7 @@
<h2>Files</h2>
<h3>Local Repository Directory</h3>
<p>The default local repository is <code>${HOME}/.small-dragonfly/dfdaemon/data/</code>. You can change it by setting the option <code>-localrep</code>.</p>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Seata is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_seata.html" target="_self">What is Seata?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Seata</span></div></div></footer></div></div>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Fescar is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">What is Fescar?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Fescar</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>

View File

@ -1,6 +1,6 @@
{
"filename": "dfdaemon.md",
"__html": "<h1>dfdaemon</h1>\n<p>dfdaemon is a proxy between pouchd/dockerd and registry used for pulling images. You can use the dfdaemon command in the command line tool.</p>\n<h2>Name</h2>\n<p>dfdaemon - a proxy between pouchd/dockerd and registry used for pulling images.</p>\n<h2>Synopsis</h2>\n<p><code>dfdaemon [options]...</code></p>\n<h2>Options</h2>\n<pre><code class=\"language-text\"> -callsystem string\n caller name (default &quot;com_ops_dragonfly&quot;)\n -certpem string\n cert.pem file path\n -dfpath string\n dfget path (default is your installed path)\n -h help\n -hostIp string\n dfdaemon host ip, default: 127.0.0.1 (default &quot;127.0.0.1&quot;)\n -keypem string\n key.pem file path\n -localrepo string\n temp output dir of dfdaemon (default is &quot;${HOME}/.small-dragonfly/dfdaemon/data&quot;)\n -maxprocs int\n the maximum number of CPUs that the dfdaemon can use (default 4)\n -notbs\n not try back source to download if throw exception (default true)\n -port uint\n dfdaemon will listen the port (default 65001)\n -ratelimit string\n net speed limit,format:xxxM/K\n -registry string\n registry addr(https://abc.xx.x or http://abc.xx.x) and must exist if dfdaemon is used to mirror mode\n -rule string\n download the url by P2P if url matches the specified pattern,format:reg1,reg2,reg3\n -urlfilter string\n filter specified url fields (default &quot;Signature&amp;Expires&amp;OSSAccessKeyId&quot;)\n -v version\n -verbose\n verbose\n</code></pre>\n<h2>Files</h2>\n<h3>Local Repository Directory</h3>\n<p>The default local repository is <code>${HOME}/.small-dragonfly/dfdaemon/data/</code>. You can change it by setting the option <code>-localrep</code>.</p>\n",
"link": "\\en-us\\docs\\cli_ref\\dfdaemon.html",
"link": "/en-us/docs/cli_ref/dfdaemon.html",
"meta": {}
}

View File

@ -12,10 +12,10 @@
<link rel="stylesheet" href="/build/documentation.css" />
</head>
<body>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/en-us/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal"></span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/en-us/index.html" target="_self">HOME</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/en-us/docs/overview/what_is_seata.html" target="_self">DOCS</a></li><li class="menu-item menu-item-normal"><a href="/en-us/blog/index.html" target="_self">BLOG</a></li><li class="menu-item menu-item-normal"><a href="/en-us/community/index.html" target="_self">COMMUNITY</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>Documentation</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Seata</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>Overview<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/what_is_seata.html" target="_self">What is Seata?</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/terminology.html" target="_self">Terminology</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></li><li style="height:180px;overflow:hidden" class="menu-item menu-item-level-2"><span>User Guide<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_server.html" target="_self">Installing Server</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_client.html" target="_self">Installing Client</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/download_files.html" target="_self">Downloading Files</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/supernode_configuration.html" target="_self">Supernode Configuration</a></li></ul></li><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>CLI Reference<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfdaemon.html" target="_self">dfdaemon</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfget.html" target="_self">dfget</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/api.html" target="_self">API Reference</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/faq.html" target="_self">FAQ</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>dfget</h1>
<p>dfget is the client of Seata. You can use the dfget command in the command line tool.</p>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/en-us/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal"></span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/en-us/index.html" target="_self">HOME</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">DOCS</a></li><li class="menu-item menu-item-normal"><a href="/en-us/blog/index.html" target="_self">BLOG</a></li><li class="menu-item menu-item-normal"><a href="/en-us/community/index.html" target="_self">COMMUNITY</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>Documentation</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Fescar</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>Overview<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">What is Fescar?</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/terminology.html" target="_self">Terminology</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></li><li style="height:180px;overflow:hidden" class="menu-item menu-item-level-2"><span>User Guide<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_server.html" target="_self">Installing Server</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_client.html" target="_self">Installing Client</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/download_files.html" target="_self">Downloading Files</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/supernode_configuration.html" target="_self">Supernode Configuration</a></li></ul></li><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>CLI Reference<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfdaemon.html" target="_self">dfdaemon</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfget.html" target="_self">dfget</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/api.html" target="_self">API Reference</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/faq.html" target="_self">FAQ</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>dfget</h1>
<p>dfget is the client of Fescar. You can use the dfget command in the command line tool.</p>
<h2>Name</h2>
<p>dfget - the client of Seata, a non-interactive P2P downloader.</p>
<p>dfget - the client of Fescar, a non-interactive P2P downloader.</p>
<h2>Synopsis</h2>
<p><code>dfget -u [URL] [options]...</code></p>
<h2>Options</h2>
@ -74,7 +74,7 @@
└── meta/
└── host.meta # stores meta information: peer server port
</code></pre>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Seata is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_seata.html" target="_self">What is Seata?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Seata</span></div></div></footer></div></div>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Fescar is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">What is Fescar?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Fescar</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>

View File

@ -1,6 +1,6 @@
{
"filename": "dfget.md",
"__html": "<h1>dfget</h1>\n<p>dfget is the client of Seata. You can use the dfget command in the command line tool.</p>\n<h2>Name</h2>\n<p>dfget - the client of Seata, a non-interactive P2P downloader.</p>\n<h2>Synopsis</h2>\n<p><code>dfget -u [URL] [options]...</code></p>\n<h2>Options</h2>\n<pre><code> -h, --help show this help message and exit\n --url URL, -u URL will download a file from this url\n --output OUTPUT, -O OUTPUT, -o OUTPUT\n output path that not only contains the dir part but\n also name part\n --md5 MD5, -m MD5 expected file md5\n --callsystem CALLSYSTEM\n system name that executes dfget,its format is\n company_department_appName\n --notbs not back source when p2p fail\n --locallimit LOCALLIMIT, -s LOCALLIMIT\n rate limit about a single download task,its format is\n 20M/m/K/k\n --totallimit TOTALLIMIT\n rate limit about the whole host,its format is\n 20M/m/K/k\n --identifier IDENTIFIER, -i IDENTIFIER\n identify download task,it is available merely when md5\n param not exist\n --timeout TIMEOUT, --exceed TIMEOUT, -e TIMEOUT\n download timeout(second)\n --filter FILTER, -f FILTER\n filter some query params of url ,e.g. -f 'key&amp;sign'\n will filter key and sign query param.in this\n way,different urls correspond one same download task\n that can use p2p mode\n --showbar, -b show progress bar\n --pattern {p2p,cdn}, -p {p2p,cdn}\n download pattern,cdn pattern not support totallimit\n --version, -v version\n --node NODE, -n NODE specify nodes\n --console show log on console\n --header HEADER http header, e.g. --header=&quot;Accept: *&quot; --header=&quot;Host:\n abc&quot;\n --dfdaemon caller is from df-daemon\n</code></pre>\n<h2>Files</h2>\n<h3>/etc/dragonfly.conf</h3>\n<p>This is the default configuration file for dfget, which specifies the address of the SuperNode.</p>\n<pre><code class=\"language-ini\"><span class=\"hljs-section\">[node]</span>\n<span class=\"hljs-attr\">address</span>=<span class=\"hljs-number\">127.0</span>.<span class=\"hljs-number\">0.1</span>,<span class=\"hljs-number\">127.0</span>.<span class=\"hljs-number\">0.2</span>\n</code></pre>\n<h3>${HOME}/.small-dragonfly</h3>\n<p>This directory is created by dfget when you start it for the first time.</p>\n<pre><code class=\"language-text\">.small-dragonfly/\n├── data/ # stores temporary data downloaded by dfget\n├── dfdaemon/\n│   └── data/ # default, stores temporary data generated by dfdaemon\n├── logs/\n│   ├── dfclient.log # dfget's log file\n│   ├── dfserver.log # log file of peer server launched by dfget\n│   └── dfdaemon.log # dfdaemon's log file\n└── meta/\n └── host.meta # stores meta information: peer server port\n</code></pre>\n",
"link": "\\en-us\\docs\\cli_ref\\dfget.html",
"__html": "<h1>dfget</h1>\n<p>dfget is the client of Fescar. You can use the dfget command in the command line tool.</p>\n<h2>Name</h2>\n<p>dfget - the client of Fescar, a non-interactive P2P downloader.</p>\n<h2>Synopsis</h2>\n<p><code>dfget -u [URL] [options]...</code></p>\n<h2>Options</h2>\n<pre><code> -h, --help show this help message and exit\n --url URL, -u URL will download a file from this url\n --output OUTPUT, -O OUTPUT, -o OUTPUT\n output path that not only contains the dir part but\n also name part\n --md5 MD5, -m MD5 expected file md5\n --callsystem CALLSYSTEM\n system name that executes dfget,its format is\n company_department_appName\n --notbs not back source when p2p fail\n --locallimit LOCALLIMIT, -s LOCALLIMIT\n rate limit about a single download task,its format is\n 20M/m/K/k\n --totallimit TOTALLIMIT\n rate limit about the whole host,its format is\n 20M/m/K/k\n --identifier IDENTIFIER, -i IDENTIFIER\n identify download task,it is available merely when md5\n param not exist\n --timeout TIMEOUT, --exceed TIMEOUT, -e TIMEOUT\n download timeout(second)\n --filter FILTER, -f FILTER\n filter some query params of url ,e.g. -f 'key&amp;sign'\n will filter key and sign query param.in this\n way,different urls correspond one same download task\n that can use p2p mode\n --showbar, -b show progress bar\n --pattern {p2p,cdn}, -p {p2p,cdn}\n download pattern,cdn pattern not support totallimit\n --version, -v version\n --node NODE, -n NODE specify nodes\n --console show log on console\n --header HEADER http header, e.g. --header=&quot;Accept: *&quot; --header=&quot;Host:\n abc&quot;\n --dfdaemon caller is from df-daemon\n</code></pre>\n<h2>Files</h2>\n<h3>/etc/dragonfly.conf</h3>\n<p>This is the default configuration file for dfget, which specifies the address of the SuperNode.</p>\n<pre><code class=\"language-ini\"><span class=\"hljs-section\">[node]</span>\n<span class=\"hljs-attr\">address</span>=<span class=\"hljs-number\">127.0</span>.<span class=\"hljs-number\">0.1</span>,<span class=\"hljs-number\">127.0</span>.<span class=\"hljs-number\">0.2</span>\n</code></pre>\n<h3>${HOME}/.small-dragonfly</h3>\n<p>This directory is created by dfget when you start it for the first time.</p>\n<pre><code class=\"language-text\">.small-dragonfly/\n├── data/ # stores temporary data downloaded by dfget\n├── dfdaemon/\n│   └── data/ # default, stores temporary data generated by dfdaemon\n├── logs/\n│   ├── dfclient.log # dfget's log file\n│   ├── dfserver.log # log file of peer server launched by dfget\n│   └── dfdaemon.log # dfdaemon's log file\n└── meta/\n └── host.meta # stores meta information: peer server port\n</code></pre>\n",
"link": "/en-us/docs/cli_ref/dfget.html",
"meta": {}
}

View File

@ -4,15 +4,15 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<meta name="keywords" content="Seata, Maintainers" />
<meta name="description" content="A list of Seata maintainers" />
<meta name="keywords" content="Fescar, Maintainers" />
<meta name="description" content="A list of Fescar maintainers" />
<!-- 网页标签标题 -->
<title>Seata Maintainers</title>
<title>Fescar Maintainers</title>
<link rel="shortcut icon" href="https://img.alicdn.com/tfs/TB1O1p6JzTpK1RjSZKPXXa3UpXa-64-64.png"/>
<link rel="stylesheet" href="/build/documentation.css" />
</head>
<body>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/en-us/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal"></span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/en-us/index.html" target="_self">HOME</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/en-us/docs/overview/what_is_seata.html" target="_self">DOCS</a></li><li class="menu-item menu-item-normal"><a href="/en-us/blog/index.html" target="_self">BLOG</a></li><li class="menu-item menu-item-normal"><a href="/en-us/community/index.html" target="_self">COMMUNITY</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>Documentation</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Seata</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>Overview<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/what_is_seata.html" target="_self">What is Seata?</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/terminology.html" target="_self">Terminology</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></li><li style="height:180px;overflow:hidden" class="menu-item menu-item-level-2"><span>User Guide<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_server.html" target="_self">Installing Server</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_client.html" target="_self">Installing Client</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/download_files.html" target="_self">Downloading Files</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/supernode_configuration.html" target="_self">Supernode Configuration</a></li></ul></li><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>CLI Reference<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfdaemon.html" target="_self">dfdaemon</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfget.html" target="_self">dfget</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/api.html" target="_self">API Reference</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/faq.html" target="_self">FAQ</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>Seata Maintainers</h1>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/en-us/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal"></span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/en-us/index.html" target="_self">HOME</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">DOCS</a></li><li class="menu-item menu-item-normal"><a href="/en-us/blog/index.html" target="_self">BLOG</a></li><li class="menu-item menu-item-normal"><a href="/en-us/community/index.html" target="_self">COMMUNITY</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>Documentation</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Fescar</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>Overview<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">What is Fescar?</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/terminology.html" target="_self">Terminology</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></li><li style="height:180px;overflow:hidden" class="menu-item menu-item-level-2"><span>User Guide<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_server.html" target="_self">Installing Server</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_client.html" target="_self">Installing Client</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/download_files.html" target="_self">Downloading Files</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/supernode_configuration.html" target="_self">Supernode Configuration</a></li></ul></li><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>CLI Reference<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfdaemon.html" target="_self">dfdaemon</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfget.html" target="_self">dfget</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/api.html" target="_self">API Reference</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/faq.html" target="_self">FAQ</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>Fescar Maintainers</h1>
<table>
<thead>
<tr>
@ -61,7 +61,7 @@
</tr>
</tbody>
</table>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Seata is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_seata.html" target="_self">What is Seata?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Seata</span></div></div></footer></div></div>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Fescar is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">What is Fescar?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Fescar</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>

View File

@ -1,10 +1,10 @@
{
"filename": "maintainers.md",
"__html": "<h1>Seata Maintainers</h1>\n<table>\n<thead>\n<tr>\n<th style=\"text-align:center\">GitHub ID</th>\n<th style=\"text-align:center\">Name</th>\n<th style=\"text-align:center\">Email</th>\n<th style=\"text-align:center\">Company</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td style=\"text-align:center\"><a href=\"https://github.com/allencloud\">allencloud</a></td>\n<td style=\"text-align:center\">Allen Sun</td>\n<td style=\"text-align:center\"><a href=\"mailto:allensun.shl@alibaba-inc.com\">allensun.shl@alibaba-inc.com</a></td>\n<td style=\"text-align:center\">Alibaba Group</td>\n</tr>\n<tr>\n<td style=\"text-align:center\"><a href=\"https://github.com/chenchaobing\">chenchaobing</a></td>\n<td style=\"text-align:center\">Chaobing Chen</td>\n<td style=\"text-align:center\"><a href=\"mailto:chenchaobing@126.com\">chenchaobing@126.com</a></td>\n<td style=\"text-align:center\">Meitu</td>\n</tr>\n<tr>\n<td style=\"text-align:center\"><a href=\"https://github.com/garfield009\">garfield009</a></td>\n<td style=\"text-align:center\">Zuozheng Hu</td>\n<td style=\"text-align:center\"><a href=\"mailto:zuozheng.hzz@alibaba-inc.com\">zuozheng.hzz@alibaba-inc.com</a></td>\n<td style=\"text-align:center\">Alibaba Group</td>\n</tr>\n<tr>\n<td style=\"text-align:center\"><a href=\"https://github.com/lowzj\">lowzj</a></td>\n<td style=\"text-align:center\">Jin Zhang</td>\n<td style=\"text-align:center\"><a href=\"mailto:zj3142063@gmail.com\">zj3142063@gmail.com</a></td>\n<td style=\"text-align:center\">Alibaba Group</td>\n</tr>\n<tr>\n<td style=\"text-align:center\"><a href=\"https://github.com/wangj998\">wangj998</a></td>\n<td style=\"text-align:center\">Jian Wang</td>\n<td style=\"text-align:center\"><a href=\"mailto:mingzhi.wj@alibaba-inc.com\">mingzhi.wj@alibaba-inc.com</a></td>\n<td style=\"text-align:center\">Alibaba Group</td>\n</tr>\n<tr>\n<td style=\"text-align:center\"><a href=\"https://github.com/zhouhaibing089\">zhouhaibing089</a></td>\n<td style=\"text-align:center\">Haibing Zhou</td>\n<td style=\"text-align:center\"><a href=\"mailto:zhouhaibing089@gmail.com\">zhouhaibing089@gmail.com</a></td>\n<td style=\"text-align:center\">eBay</td>\n</tr>\n</tbody>\n</table>\n",
"link": "\\en-us\\docs\\developers\\maintainers.html",
"__html": "<h1>Fescar Maintainers</h1>\n<table>\n<thead>\n<tr>\n<th style=\"text-align:center\">GitHub ID</th>\n<th style=\"text-align:center\">Name</th>\n<th style=\"text-align:center\">Email</th>\n<th style=\"text-align:center\">Company</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td style=\"text-align:center\"><a href=\"https://github.com/allencloud\">allencloud</a></td>\n<td style=\"text-align:center\">Allen Sun</td>\n<td style=\"text-align:center\"><a href=\"mailto:allensun.shl@alibaba-inc.com\">allensun.shl@alibaba-inc.com</a></td>\n<td style=\"text-align:center\">Alibaba Group</td>\n</tr>\n<tr>\n<td style=\"text-align:center\"><a href=\"https://github.com/chenchaobing\">chenchaobing</a></td>\n<td style=\"text-align:center\">Chaobing Chen</td>\n<td style=\"text-align:center\"><a href=\"mailto:chenchaobing@126.com\">chenchaobing@126.com</a></td>\n<td style=\"text-align:center\">Meitu</td>\n</tr>\n<tr>\n<td style=\"text-align:center\"><a href=\"https://github.com/garfield009\">garfield009</a></td>\n<td style=\"text-align:center\">Zuozheng Hu</td>\n<td style=\"text-align:center\"><a href=\"mailto:zuozheng.hzz@alibaba-inc.com\">zuozheng.hzz@alibaba-inc.com</a></td>\n<td style=\"text-align:center\">Alibaba Group</td>\n</tr>\n<tr>\n<td style=\"text-align:center\"><a href=\"https://github.com/lowzj\">lowzj</a></td>\n<td style=\"text-align:center\">Jin Zhang</td>\n<td style=\"text-align:center\"><a href=\"mailto:zj3142063@gmail.com\">zj3142063@gmail.com</a></td>\n<td style=\"text-align:center\">Alibaba Group</td>\n</tr>\n<tr>\n<td style=\"text-align:center\"><a href=\"https://github.com/wangj998\">wangj998</a></td>\n<td style=\"text-align:center\">Jian Wang</td>\n<td style=\"text-align:center\"><a href=\"mailto:mingzhi.wj@alibaba-inc.com\">mingzhi.wj@alibaba-inc.com</a></td>\n<td style=\"text-align:center\">Alibaba Group</td>\n</tr>\n<tr>\n<td style=\"text-align:center\"><a href=\"https://github.com/zhouhaibing089\">zhouhaibing089</a></td>\n<td style=\"text-align:center\">Haibing Zhou</td>\n<td style=\"text-align:center\"><a href=\"mailto:zhouhaibing089@gmail.com\">zhouhaibing089@gmail.com</a></td>\n<td style=\"text-align:center\">eBay</td>\n</tr>\n</tbody>\n</table>\n",
"link": "/en-us/docs/developers/maintainers.html",
"meta": {
"title": "Seata Maintainers",
"keywords": "Seata, Maintainers",
"description": "A list of Seata maintainers"
"title": "Fescar Maintainers",
"keywords": "Fescar, Maintainers",
"description": "A list of Fescar maintainers"
}
}

View File

@ -12,12 +12,12 @@
<link rel="stylesheet" href="/build/documentation.css" />
</head>
<body>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/en-us/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal"></span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/en-us/index.html" target="_self">HOME</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/en-us/docs/overview/what_is_seata.html" target="_self">DOCS</a></li><li class="menu-item menu-item-normal"><a href="/en-us/blog/index.html" target="_self">BLOG</a></li><li class="menu-item menu-item-normal"><a href="/en-us/community/index.html" target="_self">COMMUNITY</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>Documentation</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Seata</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>Overview<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/what_is_seata.html" target="_self">What is Seata?</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/terminology.html" target="_self">Terminology</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></li><li style="height:180px;overflow:hidden" class="menu-item menu-item-level-2"><span>User Guide<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_server.html" target="_self">Installing Server</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_client.html" target="_self">Installing Client</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/download_files.html" target="_self">Downloading Files</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/supernode_configuration.html" target="_self">Supernode Configuration</a></li></ul></li><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>CLI Reference<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfdaemon.html" target="_self">dfdaemon</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfget.html" target="_self">dfget</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/api.html" target="_self">API Reference</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/faq.html" target="_self">FAQ</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>FAQ</h1>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/en-us/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal"></span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/en-us/index.html" target="_self">HOME</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">DOCS</a></li><li class="menu-item menu-item-normal"><a href="/en-us/blog/index.html" target="_self">BLOG</a></li><li class="menu-item menu-item-normal"><a href="/en-us/community/index.html" target="_self">COMMUNITY</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>Documentation</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Fescar</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>Overview<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">What is Fescar?</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/terminology.html" target="_self">Terminology</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></li><li style="height:180px;overflow:hidden" class="menu-item menu-item-level-2"><span>User Guide<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_server.html" target="_self">Installing Server</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_client.html" target="_self">Installing Client</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/download_files.html" target="_self">Downloading Files</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/supernode_configuration.html" target="_self">Supernode Configuration</a></li></ul></li><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>CLI Reference<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfdaemon.html" target="_self">dfdaemon</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfget.html" target="_self">dfget</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/api.html" target="_self">API Reference</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/faq.html" target="_self">FAQ</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>FAQ</h1>
<p>Find the answers to the frequently asked questions.</p>
<h2>How can I pull images with Seata?</h2>
<p>See <a href="quickstart.md">Pulling an Image with Seata</a>.</p>
<h2>How can I download files with Seata?</h2>
<p>See <a href="quickstart.md">Downloading a File with Seata</a>.</p>
<h2>How can I pull images with Fescar?</h2>
<p>See <a href="quickstart.md">Pulling an Image with Fescar</a>.</p>
<h2>How can I download files with Fescar?</h2>
<p>See <a href="quickstart.md">Downloading a File with Fescar</a>.</p>
<h2>What is a SuperNode?</h2>
<p>A SuperNode is a long-time process that plays the following roles:</p>
<ul>
@ -25,48 +25,48 @@
<li>A CDN server that caches downloaded data from source to avoid downloading same files repeatedly.</li>
</ul>
<h2>What is dfget?</h2>
<p>Dfget is the Seata client used for downloading files. It's similar to wget.</p>
<p>Dfget is the Fescar client used for downloading files. It's similar to wget.</p>
<p>Meanwhile, it also plays the role of a peer, which can transfer data between each other in the P2P network.</p>
<h2>What is dfdaemon?</h2>
<p>Dfdaemon is only used for pulling images. It establishes a proxy between dockerd/pouchd and registry.</p>
<p>Dfdaemon filters out layer fetching requests from all requests sent by dockerd/pouchd when pulling images, then uses dfget to download these layers.</p>
<h2>Where is the installation directory of Seata client dfget?</h2>
<h2>Where is the installation directory of Fescar client dfget?</h2>
<p>Normally, there are two installation directories:</p>
<ul>
<li>Seata plugin for StarAgent: <code>/home/staragent/plugins/dragonfly/dfget</code></li>
<li>Fescar plugin for StarAgent: <code>/home/staragent/plugins/dragonfly/dfget</code></li>
<li>StarAgent's built-in dfget: <code>/home/staragent/bin/dfget</code></li>
</ul>
<p>The Seata plugin is used by default. If the Seata plugin is not installed, then the StarAgent's build-in dfget is used.</p>
<h2>Where is the log directory of Seata client dfget?</h2>
<p>The Fescar plugin is used by default. If the Fescar plugin is not installed, then the StarAgent's build-in dfget is used.</p>
<h2>Where is the log directory of Fescar client dfget?</h2>
<p>The log directory is <code>$HOME/.small-dragonfly/logs/dfclient.log</code>.</p>
<h2>Where is the data directory of Seata client dfget?</h2>
<h2>Where is the data directory of Fescar client dfget?</h2>
<p>The data directory is <code>$HOME/.small-dragonfly/data</code>.</p>
<p>Each account has its own data directory. A P2P downloading job generates two data files under this directory:</p>
<ul>
<li>A temporary downloading file for the target file, with the name <code>targetFileName-sign</code>. This file is moved to the target directory after the download is complete.</li>
<li>A copy of the temporary downloading file for uploading, with the name <code>targetFileName-sign.service</code>. If no downloading jobs are downloading this file from this node, then it gets cleaned after three minutes. Before the process is completed normally, any file lasting longer than 60 minutes will be purged.</li>
</ul>
<h2>Where is the meta directory of Seata client dfget?</h2>
<h2>Where is the meta directory of Fescar client dfget?</h2>
<p>The meta directory is <code>$HOME/.small-dragonfly/meta</code>.</p>
<p>This directory caches the address list of the local node (IP, hostname, IDC, security domain, and so on), managing nodes, and supernodes.</p>
<p>When started for the first time, the Seata client will access the managing node. The managing node will retrieve the security domains, IDC, geo-location, and more information of this node by querying armory, and assign the most suitable SuperNode. The managing node also distributes the address lists of all other supernodes. dfget stores the above information in the meta directory on the local drive. When the next job is started, dfget reads the meta information from this directory, avoiding accessing the managing node repeatedly.</p>
<p>When started for the first time, the Fescar client will access the managing node. The managing node will retrieve the security domains, IDC, geo-location, and more information of this node by querying armory, and assign the most suitable SuperNode. The managing node also distributes the address lists of all other supernodes. dfget stores the above information in the meta directory on the local drive. When the next job is started, dfget reads the meta information from this directory, avoiding accessing the managing node repeatedly.</p>
<p>dfget always finds the most suitable assigned node to register. If fails, it requests other supernodes in order. If all fail, then it requests the managing node once again, updates the meta information, and repeats the above steps. If still fails, then the job fails.</p>
<p><strong>Tip</strong>: If the dfclient.log suggests that the SuperNode registration fails all the time, try delete all files from the meta directory and try again.</p>
<h2>How to check the version of Seata client dfget?</h2>
<p>If you have installed the Seata client, run this command:</p>
<h2>How to check the version of Fescar client dfget?</h2>
<p>If you have installed the Fescar client, run this command:</p>
<pre><code class="language-bash">dfget -v
</code></pre>
<h2>Why is the dfget process still there after the download is complete?</h2>
<p>Because Seata adopts a P2P downloading approach, dfget provides uploading services in addition to downloading services. If there are no new jobs within five minutes, the dfget process will be terminated automatically.</p>
<h2>How to clean up the data directory of Seata?</h2>
<p>Normally, Seata automatically cleans up files which are not accessed in three minutes from the uploading file list, and the residual files that live longer than one hour from the data directory.</p>
<p>Because Fescar adopts a P2P downloading approach, dfget provides uploading services in addition to downloading services. If there are no new jobs within five minutes, the dfget process will be terminated automatically.</p>
<h2>How to clean up the data directory of Fescar?</h2>
<p>Normally, Fescar automatically cleans up files which are not accessed in three minutes from the uploading file list, and the residual files that live longer than one hour from the data directory.</p>
<p>Follow these steps to clean up the data directory manually:</p>
<ol>
<li>Identify the account to which the residual files belong.</li>
<li>Check if there is any running dfget process started by other accounts.</li>
<li>If there is such a process, then terminate the process, and start a dfget process with the account identified at Step 1. This process will automatically clean up the residual files from the data directory.</li>
</ol>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Seata is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_seata.html" target="_self">What is Seata?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Seata</span></div></div></footer></div></div>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Fescar is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">What is Fescar?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Fescar</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>

File diff suppressed because one or more lines are too long

View File

@ -12,8 +12,8 @@
<link rel="stylesheet" href="/build/documentation.css" />
</head>
<body>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/en-us/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal"></span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/en-us/index.html" target="_self">HOME</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/en-us/docs/overview/what_is_seata.html" target="_self">DOCS</a></li><li class="menu-item menu-item-normal"><a href="/en-us/blog/index.html" target="_self">BLOG</a></li><li class="menu-item menu-item-normal"><a href="/en-us/community/index.html" target="_self">COMMUNITY</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>Documentation</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Seata</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>Overview<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/what_is_seata.html" target="_self">What is Seata?</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/terminology.html" target="_self">Terminology</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></li><li style="height:180px;overflow:hidden" class="menu-item menu-item-level-2"><span>User Guide<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_server.html" target="_self">Installing Server</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_client.html" target="_self">Installing Client</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/download_files.html" target="_self">Downloading Files</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/supernode_configuration.html" target="_self">Supernode Configuration</a></li></ul></li><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>CLI Reference<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfdaemon.html" target="_self">dfdaemon</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfget.html" target="_self">dfget</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/api.html" target="_self">API Reference</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/faq.html" target="_self">FAQ</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>Seata Terminology</h1>
<p>This topic lists the common terms used throughout Seata.</p>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/en-us/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal"></span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/en-us/index.html" target="_self">HOME</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">DOCS</a></li><li class="menu-item menu-item-normal"><a href="/en-us/blog/index.html" target="_self">BLOG</a></li><li class="menu-item menu-item-normal"><a href="/en-us/community/index.html" target="_self">COMMUNITY</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>Documentation</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Fescar</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>Overview<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">What is Fescar?</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/terminology.html" target="_self">Terminology</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></li><li style="height:180px;overflow:hidden" class="menu-item menu-item-level-2"><span>User Guide<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_server.html" target="_self">Installing Server</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_client.html" target="_self">Installing Client</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/download_files.html" target="_self">Downloading Files</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/supernode_configuration.html" target="_self">Supernode Configuration</a></li></ul></li><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>CLI Reference<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfdaemon.html" target="_self">dfdaemon</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfget.html" target="_self">dfget</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/api.html" target="_self">API Reference</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/faq.html" target="_self">FAQ</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>Fescar Terminology</h1>
<p>This topic lists the common terms used throughout Fescar.</p>
<h2>SuperNode</h2>
<p>SuperNode is a long-time process with two primary responsibilities:</p>
<ul>
@ -21,12 +21,12 @@
<li>It's also a CDN server that caches downloaded data from source to avoid downloading same files repeatedly.</li>
</ul>
<h2>dfget</h2>
<p>Dfget is the client of Seata used for downloading files. It's similar to wget.</p>
<p>Dfget is the client of Fescar used for downloading files. It's similar to wget.</p>
<p>At the same time, it also plays the role of peer, which can transfer data between each other in P2P network.</p>
<h2>dfdaemon</h2>
<p>Dfdaemon is used for pulling images only. It establishes a proxy between dockerd/pouchd and registry.</p>
<p>Dfdaemon filters out layer fetching requests from all requests sent by dockerd/pouchd when pulling images, then uses dfget to downloading these layers.</p>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Seata is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_seata.html" target="_self">What is Seata?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Seata</span></div></div></footer></div></div>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Fescar is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">What is Fescar?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Fescar</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>

View File

@ -1,6 +1,6 @@
{
"filename": "terminology.md",
"__html": "<h1>Seata Terminology</h1>\n<p>This topic lists the common terms used throughout Seata.</p>\n<h2>SuperNode</h2>\n<p>SuperNode is a long-time process with two primary responsibilities:</p>\n<ul>\n<li>It's the tracker and scheduler in the P2P network that choose appropriate downloading net-path for each peer.</li>\n<li>It's also a CDN server that caches downloaded data from source to avoid downloading same files repeatedly.</li>\n</ul>\n<h2>dfget</h2>\n<p>Dfget is the client of Seata used for downloading files. It's similar to wget.</p>\n<p>At the same time, it also plays the role of peer, which can transfer data between each other in P2P network.</p>\n<h2>dfdaemon</h2>\n<p>Dfdaemon is used for pulling images only. It establishes a proxy between dockerd/pouchd and registry.</p>\n<p>Dfdaemon filters out layer fetching requests from all requests sent by dockerd/pouchd when pulling images, then uses dfget to downloading these layers.</p>\n",
"link": "\\en-us\\docs\\overview\\terminology.html",
"__html": "<h1>Fescar Terminology</h1>\n<p>This topic lists the common terms used throughout Fescar.</p>\n<h2>SuperNode</h2>\n<p>SuperNode is a long-time process with two primary responsibilities:</p>\n<ul>\n<li>It's the tracker and scheduler in the P2P network that choose appropriate downloading net-path for each peer.</li>\n<li>It's also a CDN server that caches downloaded data from source to avoid downloading same files repeatedly.</li>\n</ul>\n<h2>dfget</h2>\n<p>Dfget is the client of Fescar used for downloading files. It's similar to wget.</p>\n<p>At the same time, it also plays the role of peer, which can transfer data between each other in P2P network.</p>\n<h2>dfdaemon</h2>\n<p>Dfdaemon is used for pulling images only. It establishes a proxy between dockerd/pouchd and registry.</p>\n<p>Dfdaemon filters out layer fetching requests from all requests sent by dockerd/pouchd when pulling images, then uses dfget to downloading these layers.</p>\n",
"link": "/en-us/docs/overview/terminology.html",
"meta": {}
}

View File

@ -12,31 +12,31 @@
<link rel="stylesheet" href="/build/documentation.css" />
</head>
<body>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/en-us/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal"></span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/en-us/index.html" target="_self">HOME</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/en-us/docs/overview/what_is_seata.html" target="_self">DOCS</a></li><li class="menu-item menu-item-normal"><a href="/en-us/blog/index.html" target="_self">BLOG</a></li><li class="menu-item menu-item-normal"><a href="/en-us/community/index.html" target="_self">COMMUNITY</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>Documentation</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Seata</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>Overview<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/what_is_seata.html" target="_self">What is Seata?</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/terminology.html" target="_self">Terminology</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></li><li style="height:180px;overflow:hidden" class="menu-item menu-item-level-2"><span>User Guide<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_server.html" target="_self">Installing Server</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_client.html" target="_self">Installing Client</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/download_files.html" target="_self">Downloading Files</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/supernode_configuration.html" target="_self">Supernode Configuration</a></li></ul></li><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>CLI Reference<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfdaemon.html" target="_self">dfdaemon</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfget.html" target="_self">dfget</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/api.html" target="_self">API Reference</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/faq.html" target="_self">FAQ</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>What Is Seata?</h1>
<p>Seata is an intelligent P2P-based image and file distribution tool. It aims to improve the efficiency and success rate of file transferring, and maximize the usage of network bandwidth, especially for the distribution of larget amounts of data, such as application distribution, cache distribution, log distribution, and image distribution.</p>
<p>At Alibaba, every month Seata is invoked two billion times and distributes 3.4PB of data. Seata has become one of the most important pieces of infrastructure at Alibaba.</p>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/en-us/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal"></span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/en-us/index.html" target="_self">HOME</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">DOCS</a></li><li class="menu-item menu-item-normal"><a href="/en-us/blog/index.html" target="_self">BLOG</a></li><li class="menu-item menu-item-normal"><a href="/en-us/community/index.html" target="_self">COMMUNITY</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>Documentation</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Fescar</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>Overview<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">What is Fescar?</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/terminology.html" target="_self">Terminology</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></li><li style="height:180px;overflow:hidden" class="menu-item menu-item-level-2"><span>User Guide<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_server.html" target="_self">Installing Server</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_client.html" target="_self">Installing Client</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/download_files.html" target="_self">Downloading Files</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/supernode_configuration.html" target="_self">Supernode Configuration</a></li></ul></li><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>CLI Reference<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfdaemon.html" target="_self">dfdaemon</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfget.html" target="_self">dfget</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/api.html" target="_self">API Reference</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/faq.html" target="_self">FAQ</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>What Is Fescar?</h1>
<p>Fescar is an intelligent P2P-based image and file distribution tool. It aims to improve the efficiency and success rate of file transferring, and maximize the usage of network bandwidth, especially for the distribution of larget amounts of data, such as application distribution, cache distribution, log distribution, and image distribution.</p>
<p>At Alibaba, every month Fescar is invoked two billion times and distributes 3.4PB of data. Fescar has become one of the most important pieces of infrastructure at Alibaba.</p>
<p>While container technologies makes DevOps life easier most of the time, it surely brings some challenges: for example the efficiency of image distribution, especially when you have to replicate image distribution on several hosts.</p>
<p>Seata works extremely well with both Docker and <a href="https://github.com/alibaba/pouch">PouchContainer</a> in this scenario. It's also compatible with containers of other formats. It delivers up to 57 times the throughput of native docker and saves up to 99.5% of the out bandwidth of registry.</p>
<p>Seata makes it simple and cost-effective to set up, operate, and scale any kind of file, image, or data distribution.</p>
<h2>Why Seata</h2>
<p>This project is an open-source version of the Seata used at Alibaba. It has the following features:</p>
<p>Fescar works extremely well with both Docker and <a href="https://github.com/alibaba/pouch">PouchContainer</a> in this scenario. It's also compatible with containers of other formats. It delivers up to 57 times the throughput of native docker and saves up to 99.5% of the out bandwidth of registry.</p>
<p>Fescar makes it simple and cost-effective to set up, operate, and scale any kind of file, image, or data distribution.</p>
<h2>Why Fescar</h2>
<p>This project is an open-source version of the Fescar used at Alibaba. It has the following features:</p>
<p><strong>Note:</strong> More Alibaba-internal features will be made available to open-source users soon. Stay tuned!</p>
<ul>
<li><strong>P2P-based file distribution</strong>: By using the P2P technology for file transmission, it makes the most out of the bandwidth resources of each peer to improve downloading efficiency, and saves a lot of cross-IDC bandwidth, especially the costly cross-board bandwidth.</li>
<li><strong>Non-invasive support to all kinds of container technologies</strong>: Seata can seamlessly support various containers for distributing images.</li>
<li><strong>Host level speed limit</strong>: In addition to rate limit for the current download task like many other downloading tools (for example wget and curl), Seata also provides rate limit for the entire host.</li>
<li><strong>Non-invasive support to all kinds of container technologies</strong>: Fescar can seamlessly support various containers for distributing images.</li>
<li><strong>Host level speed limit</strong>: In addition to rate limit for the current download task like many other downloading tools (for example wget and curl), Fescar also provides rate limit for the entire host.</li>
<li><strong>Passive CDN</strong>: The CDN mechanism can avoid repetitive remote downloads.</li>
<li><strong>Strong consistency</strong>: Seata can make sure that all downloaded files are consistent even if users do not provide any check code (MD5).</li>
<li><strong>Strong consistency</strong>: Fescar can make sure that all downloaded files are consistent even if users do not provide any check code (MD5).</li>
<li><strong>Disk protection and highly efficient IO</strong>: Prechecking disk space, delaying synchronization, writing file blocks in the best order, isolating net-read/disk-write, and so on.</li>
<li><strong>High performance</strong>: Cluster Manager is completely closed-loop, which means that it doesn't rely on any database or distributed cache, processing requests with extremely high performance.</li>
<li><strong>Auto-isolation of Exception</strong>: Seata will automatically isolate exception nodes (peer or Cluster Manager) to improve download stability.</li>
<li><strong>Auto-isolation of Exception</strong>: Fescar will automatically isolate exception nodes (peer or Cluster Manager) to improve download stability.</li>
<li><strong>No pressure on file source</strong>: Generally, only a few Cluster Managers will download files from the source.</li>
<li><strong>Support standard HTTP header</strong>: Support submitting authentication information through HTTP header.</li>
<li><strong>Effective concurrency control of Registry Auth</strong>: Reduce the pressure on the Registry Auth Service.</li>
<li><strong>Simple and easy to use</strong>: Very few configurations are needed.</li>
</ul>
<h2>How Does It Stack Up Against Traditional Solution?</h2>
<p>We carried out an experiment to compare the performance of Seata and wget.</p>
<p>We carried out an experiment to compare the performance of Fescar and wget.</p>
<table>
<thead>
<tr>
@ -46,7 +46,7 @@
</thead>
<tbody>
<tr>
<td>Seata Server</td>
<td>Fescar Server</td>
<td>2 * (24-Core 64GB-RAM 2000Mb/s)</td>
</tr>
<tr>
@ -69,9 +69,9 @@
</table>
<p>The expeirment result is as shown in the following figure.</p>
<p><img src="../img/performance.png" alt="How it stacks up"></p>
<p>As you can see in the chart, for Seata, no matter how many clients are downloading, the average downloading time is always about 12 seconds. But for wget, the downloading time keeps increasing with the number of clients. When the number of wget clients reaches 1,200, the file source crashed and therefore cannot serve any client.</p>
<p>As you can see in the chart, for Fescar, no matter how many clients are downloading, the average downloading time is always about 12 seconds. But for wget, the downloading time keeps increasing with the number of clients. When the number of wget clients reaches 1,200, the file source crashed and therefore cannot serve any client.</p>
<h2>How Does It Work?</h2>
<p>Seata works slightly differently when downloading general files and downloading container images.</p>
<p>Fescar works slightly differently when downloading general files and downloading container images.</p>
<h3>Downloading General Files</h3>
<p>The Cluster Manager is also called a SuperNode, which is responsible for CDN and scheduling every peer to transfer blocks between each other. dfget is the P2P client, which is also called &quot;peer&quot;. It's mainly used to download and share blocks.</p>
<p><img src="../img/dfget.png" alt="Downloading General Files"></p>
@ -81,7 +81,7 @@
<h3>Downloading Blocks</h3>
<p>Every file is divided into multiple blocks, which are transmitted between peers. Each peer is a P2P client. Cluster Manager will check if the corresponding file exists in the local disk. If not, it will be downloaded into Cluster Manager from file server.</p>
<p><img src="../img/distributing.png" alt="How file blocks are downloaded"></p>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Seata is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_seata.html" target="_self">What is Seata?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Seata</span></div></div></footer></div></div>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Fescar is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">What is Fescar?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Fescar</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,92 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<meta name="keywords" content="what_is_fescar" />
<meta name="description" content="what_is_fescar" />
<!-- 网页标签标题 -->
<title>what_is_fescar</title>
<link rel="shortcut icon" href="https://img.alicdn.com/tfs/TB1O1p6JzTpK1RjSZKPXXa3UpXa-64-64.png"/>
<link rel="stylesheet" href="/build/documentation.css" />
</head>
<body>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/en-us/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal"></span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/en-us/index.html" target="_self">HOME</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">DOCS</a></li><li class="menu-item menu-item-normal"><a href="/en-us/blog/index.html" target="_self">BLOG</a></li><li class="menu-item menu-item-normal"><a href="/en-us/community/index.html" target="_self">COMMUNITY</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>Documentation</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Fescar</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>Overview<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">What is Fescar?</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/terminology.html" target="_self">Terminology</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></li><li style="height:180px;overflow:hidden" class="menu-item menu-item-level-2"><span>User Guide<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_server.html" target="_self">Installing Server</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_client.html" target="_self">Installing Client</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/download_files.html" target="_self">Downloading Files</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/supernode_configuration.html" target="_self">Supernode Configuration</a></li></ul></li><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>CLI Reference<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfdaemon.html" target="_self">dfdaemon</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfget.html" target="_self">dfget</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/api.html" target="_self">API Reference</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/faq.html" target="_self">FAQ</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>What Is Fescar?</h1>
<p>Fescar is an intelligent P2P-based image and file distribution tool. It aims to improve the efficiency and success rate of file transferring, and maximize the usage of network bandwidth, especially for the distribution of larget amounts of data, such as application distribution, cache distribution, log distribution, and image distribution.</p>
<p>At Alibaba, every month Fescar is invoked two billion times and distributes 3.4PB of data. Fescar has become one of the most important pieces of infrastructure at Alibaba.</p>
<p>While container technologies makes DevOps life easier most of the time, it surely brings some challenges: for example the efficiency of image distribution, especially when you have to replicate image distribution on several hosts.</p>
<p>Fescar works extremely well with both Docker and <a href="https://github.com/alibaba/pouch">PouchContainer</a> in this scenario. It's also compatible with containers of other formats. It delivers up to 57 times the throughput of native docker and saves up to 99.5% of the out bandwidth of registry.</p>
<p>Fescar makes it simple and cost-effective to set up, operate, and scale any kind of file, image, or data distribution.</p>
<h2>Why Fescar</h2>
<p>This project is an open-source version of the Fescar used at Alibaba. It has the following features:</p>
<p><strong>Note:</strong> More Alibaba-internal features will be made available to open-source users soon. Stay tuned!</p>
<ul>
<li><strong>P2P-based file distribution</strong>: By using the P2P technology for file transmission, it makes the most out of the bandwidth resources of each peer to improve downloading efficiency, and saves a lot of cross-IDC bandwidth, especially the costly cross-board bandwidth.</li>
<li><strong>Non-invasive support to all kinds of container technologies</strong>: Fescar can seamlessly support various containers for distributing images.</li>
<li><strong>Host level speed limit</strong>: In addition to rate limit for the current download task like many other downloading tools (for example wget and curl), Fescar also provides rate limit for the entire host.</li>
<li><strong>Passive CDN</strong>: The CDN mechanism can avoid repetitive remote downloads.</li>
<li><strong>Strong consistency</strong>: Fescar can make sure that all downloaded files are consistent even if users do not provide any check code (MD5).</li>
<li><strong>Disk protection and highly efficient IO</strong>: Prechecking disk space, delaying synchronization, writing file blocks in the best order, isolating net-read/disk-write, and so on.</li>
<li><strong>High performance</strong>: Cluster Manager is completely closed-loop, which means that it doesn't rely on any database or distributed cache, processing requests with extremely high performance.</li>
<li><strong>Auto-isolation of Exception</strong>: Fescar will automatically isolate exception nodes (peer or Cluster Manager) to improve download stability.</li>
<li><strong>No pressure on file source</strong>: Generally, only a few Cluster Managers will download files from the source.</li>
<li><strong>Support standard HTTP header</strong>: Support submitting authentication information through HTTP header.</li>
<li><strong>Effective concurrency control of Registry Auth</strong>: Reduce the pressure on the Registry Auth Service.</li>
<li><strong>Simple and easy to use</strong>: Very few configurations are needed.</li>
</ul>
<h2>How Does It Stack Up Against Traditional Solution?</h2>
<p>We carried out an experiment to compare the performance of Fescar and wget.</p>
<table>
<thead>
<tr>
<th>Test Environment</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>Fescar Server</td>
<td>2 * (24-Core 64GB-RAM 2000Mb/s)</td>
</tr>
<tr>
<td>File Source Server</td>
<td>2 * (24-Core 64GB-RAM 2000Mb/s)</td>
</tr>
<tr>
<td>Client</td>
<td>4-Core 8GB-RAM 200Mb/s</td>
</tr>
<tr>
<td>Target File Size</td>
<td>200MB</td>
</tr>
<tr>
<td>Experiment Date</td>
<td>April 20, 2016</td>
</tr>
</tbody>
</table>
<p>The expeirment result is as shown in the following figure.</p>
<p><img src="../img/performance.png" alt="How it stacks up"></p>
<p>As you can see in the chart, for Fescar, no matter how many clients are downloading, the average downloading time is always about 12 seconds. But for wget, the downloading time keeps increasing with the number of clients. When the number of wget clients reaches 1,200, the file source crashed and therefore cannot serve any client.</p>
<h2>How Does It Work?</h2>
<p>Fescar works slightly differently when downloading general files and downloading container images.</p>
<h3>Downloading General Files</h3>
<p>The Cluster Manager is also called a SuperNode, which is responsible for CDN and scheduling every peer to transfer blocks between each other. dfget is the P2P client, which is also called &quot;peer&quot;. It's mainly used to download and share blocks.</p>
<p><img src="../img/dfget.png" alt="Downloading General Files"></p>
<h3>Downloading Container Images</h3>
<p>Registry is similar to the file server above. dfget proxy is also called dfdaemon, which intercepts HTTP requests from docker pull or docker push, and then decides which requests to process with dfget.</p>
<p><img src="../img/dfget-combine-container.png" alt="Downloading Container Images"></p>
<h3>Downloading Blocks</h3>
<p>Every file is divided into multiple blocks, which are transmitted between peers. Each peer is a P2P client. Cluster Manager will check if the corresponding file exists in the local disk. If not, it will be downloaded into Cluster Manager from file server.</p>
<p><img src="../img/distributing.png" alt="How file blocks are downloaded"></p>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Fescar is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">What is Fescar?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Fescar</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>
window.rootPath = '';
</script>
<script src="/build/documentation.js"></script>
</body>
</html>

File diff suppressed because one or more lines are too long

View File

@ -1,92 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<meta name="keywords" content="what_is_seata" />
<meta name="description" content="what_is_seata" />
<!-- 网页标签标题 -->
<title>what_is_seata</title>
<link rel="shortcut icon" href="https://img.alicdn.com/tfs/TB1O1p6JzTpK1RjSZKPXXa3UpXa-64-64.png"/>
<link rel="stylesheet" href="/build/documentation.css" />
</head>
<body>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/en-us/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal"></span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/en-us/index.html" target="_self">HOME</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/en-us/docs/overview/what_is_seata.html" target="_self">DOCS</a></li><li class="menu-item menu-item-normal"><a href="/en-us/blog/index.html" target="_self">BLOG</a></li><li class="menu-item menu-item-normal"><a href="/en-us/community/index.html" target="_self">COMMUNITY</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>Documentation</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Seata</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>Overview<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/what_is_seata.html" target="_self">What is Seata?</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/terminology.html" target="_self">Terminology</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></li><li style="height:180px;overflow:hidden" class="menu-item menu-item-level-2"><span>User Guide<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_server.html" target="_self">Installing Server</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_client.html" target="_self">Installing Client</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/download_files.html" target="_self">Downloading Files</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/supernode_configuration.html" target="_self">Supernode Configuration</a></li></ul></li><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>CLI Reference<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfdaemon.html" target="_self">dfdaemon</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfget.html" target="_self">dfget</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/api.html" target="_self">API Reference</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/faq.html" target="_self">FAQ</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>What Is Seata?</h1>
<p>Seata is an intelligent P2P-based image and file distribution tool. It aims to improve the efficiency and success rate of file transferring, and maximize the usage of network bandwidth, especially for the distribution of larget amounts of data, such as application distribution, cache distribution, log distribution, and image distribution.</p>
<p>At Alibaba, every month Seata is invoked two billion times and distributes 3.4PB of data. Seata has become one of the most important pieces of infrastructure at Alibaba.</p>
<p>While container technologies makes DevOps life easier most of the time, it surely brings some challenges: for example the efficiency of image distribution, especially when you have to replicate image distribution on several hosts.</p>
<p>Seata works extremely well with both Docker and <a href="https://github.com/alibaba/pouch">PouchContainer</a> in this scenario. It's also compatible with containers of other formats. It delivers up to 57 times the throughput of native docker and saves up to 99.5% of the out bandwidth of registry.</p>
<p>Seata makes it simple and cost-effective to set up, operate, and scale any kind of file, image, or data distribution.</p>
<h2>Why Seata</h2>
<p>This project is an open-source version of the Seata used at Alibaba. It has the following features:</p>
<p><strong>Note:</strong> More Alibaba-internal features will be made available to open-source users soon. Stay tuned!</p>
<ul>
<li><strong>P2P-based file distribution</strong>: By using the P2P technology for file transmission, it makes the most out of the bandwidth resources of each peer to improve downloading efficiency, and saves a lot of cross-IDC bandwidth, especially the costly cross-board bandwidth.</li>
<li><strong>Non-invasive support to all kinds of container technologies</strong>: Seata can seamlessly support various containers for distributing images.</li>
<li><strong>Host level speed limit</strong>: In addition to rate limit for the current download task like many other downloading tools (for example wget and curl), Seata also provides rate limit for the entire host.</li>
<li><strong>Passive CDN</strong>: The CDN mechanism can avoid repetitive remote downloads.</li>
<li><strong>Strong consistency</strong>: Seata can make sure that all downloaded files are consistent even if users do not provide any check code (MD5).</li>
<li><strong>Disk protection and highly efficient IO</strong>: Prechecking disk space, delaying synchronization, writing file blocks in the best order, isolating net-read/disk-write, and so on.</li>
<li><strong>High performance</strong>: Cluster Manager is completely closed-loop, which means that it doesn't rely on any database or distributed cache, processing requests with extremely high performance.</li>
<li><strong>Auto-isolation of Exception</strong>: Seata will automatically isolate exception nodes (peer or Cluster Manager) to improve download stability.</li>
<li><strong>No pressure on file source</strong>: Generally, only a few Cluster Managers will download files from the source.</li>
<li><strong>Support standard HTTP header</strong>: Support submitting authentication information through HTTP header.</li>
<li><strong>Effective concurrency control of Registry Auth</strong>: Reduce the pressure on the Registry Auth Service.</li>
<li><strong>Simple and easy to use</strong>: Very few configurations are needed.</li>
</ul>
<h2>How Does It Stack Up Against Traditional Solution?</h2>
<p>We carried out an experiment to compare the performance of Seata and wget.</p>
<table>
<thead>
<tr>
<th>Test Environment</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>Seata Server</td>
<td>2 * (24-Core 64GB-RAM 2000Mb/s)</td>
</tr>
<tr>
<td>File Source Server</td>
<td>2 * (24-Core 64GB-RAM 2000Mb/s)</td>
</tr>
<tr>
<td>Client</td>
<td>4-Core 8GB-RAM 200Mb/s</td>
</tr>
<tr>
<td>Target File Size</td>
<td>200MB</td>
</tr>
<tr>
<td>Experiment Date</td>
<td>April 20, 2016</td>
</tr>
</tbody>
</table>
<p>The expeirment result is as shown in the following figure.</p>
<p><img src="../img/performance.png" alt="How it stacks up"></p>
<p>As you can see in the chart, for Seata, no matter how many clients are downloading, the average downloading time is always about 12 seconds. But for wget, the downloading time keeps increasing with the number of clients. When the number of wget clients reaches 1,200, the file source crashed and therefore cannot serve any client.</p>
<h2>How Does It Work?</h2>
<p>Seata works slightly differently when downloading general files and downloading container images.</p>
<h3>Downloading General Files</h3>
<p>The Cluster Manager is also called a SuperNode, which is responsible for CDN and scheduling every peer to transfer blocks between each other. dfget is the P2P client, which is also called &quot;peer&quot;. It's mainly used to download and share blocks.</p>
<p><img src="../img/dfget.png" alt="Downloading General Files"></p>
<h3>Downloading Container Images</h3>
<p>Registry is similar to the file server above. dfget proxy is also called dfdaemon, which intercepts HTTP requests from docker pull or docker push, and then decides which requests to process with dfget.</p>
<p><img src="../img/dfget-combine-container.png" alt="Downloading Container Images"></p>
<h3>Downloading Blocks</h3>
<p>Every file is divided into multiple blocks, which are transmitted between peers. Each peer is a P2P client. Cluster Manager will check if the corresponding file exists in the local disk. If not, it will be downloaded into Cluster Manager from file server.</p>
<p><img src="../img/distributing.png" alt="How file blocks are downloaded"></p>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Seata is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_seata.html" target="_self">What is Seata?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Seata</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>
window.rootPath = '';
</script>
<script src="/build/documentation.js"></script>
</body>
</html>

File diff suppressed because one or more lines are too long

View File

@ -12,8 +12,8 @@
<link rel="stylesheet" href="/build/documentation.css" />
</head>
<body>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/en-us/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal"></span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/en-us/index.html" target="_self">HOME</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/en-us/docs/overview/what_is_seata.html" target="_self">DOCS</a></li><li class="menu-item menu-item-normal"><a href="/en-us/blog/index.html" target="_self">BLOG</a></li><li class="menu-item menu-item-normal"><a href="/en-us/community/index.html" target="_self">COMMUNITY</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>Documentation</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Seata</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>Overview<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/what_is_seata.html" target="_self">What is Seata?</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/terminology.html" target="_self">Terminology</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></li><li style="height:180px;overflow:hidden" class="menu-item menu-item-level-2"><span>User Guide<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_server.html" target="_self">Installing Server</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_client.html" target="_self">Installing Client</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/download_files.html" target="_self">Downloading Files</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/supernode_configuration.html" target="_self">Supernode Configuration</a></li></ul></li><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>CLI Reference<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfdaemon.html" target="_self">dfdaemon</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfget.html" target="_self">dfget</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/api.html" target="_self">API Reference</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/faq.html" target="_self">FAQ</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>Seata Quick Start</h1>
<p>In this quick start guide, you will get a feeling of Seata by starting a <a href="overview/terminology.md">SuperNode</a> (the server) in your Docker container, installing the Seata client (the client), and then downloading a container image and a general file, which are likely what you'll be doing frequently in your use case.</p>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/en-us/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal"></span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/en-us/index.html" target="_self">HOME</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">DOCS</a></li><li class="menu-item menu-item-normal"><a href="/en-us/blog/index.html" target="_self">BLOG</a></li><li class="menu-item menu-item-normal"><a href="/en-us/community/index.html" target="_self">COMMUNITY</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>Documentation</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Fescar</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>Overview<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">What is Fescar?</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/terminology.html" target="_self">Terminology</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></li><li style="height:180px;overflow:hidden" class="menu-item menu-item-level-2"><span>User Guide<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_server.html" target="_self">Installing Server</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_client.html" target="_self">Installing Client</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/download_files.html" target="_self">Downloading Files</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/supernode_configuration.html" target="_self">Supernode Configuration</a></li></ul></li><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>CLI Reference<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfdaemon.html" target="_self">dfdaemon</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfget.html" target="_self">dfget</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/api.html" target="_self">API Reference</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/faq.html" target="_self">FAQ</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>Fescar Quick Start</h1>
<p>In this quick start guide, you will get a feeling of Fescar by starting a <a href="overview/terminology.md">SuperNode</a> (the server) in your Docker container, installing the Fescar client (the client), and then downloading a container image and a general file, which are likely what you'll be doing frequently in your use case.</p>
<h2>Prerequisites</h2>
<p>You have started your Docker container.</p>
<h2>Step 1: Starting a SuperNode (the Server) in Your Docker Container</h2>
@ -41,8 +41,8 @@ docker run -d -p 8001:8001 -p 8002:8002 <span class="hljs-variable">${imageName}
docker run -d -p 8001:8001 -p 8002:8002 registry.cn-hangzhou.aliyuncs.com/alidragonfly/supernode:0.2.0
</code></pre>
<h2>Step 2: Installing Seata Client</h2>
<p>You have two options of installing Seata client: installing from source code, or installing by pulling the image.</p>
<h2>Step 2: Installing Fescar Client</h2>
<p>You have two options of installing Fescar client: installing from source code, or installing by pulling the image.</p>
<h3>Option 1: Installing from Source Code</h3>
<ol>
<li>
@ -68,10 +68,10 @@ wget <span class="hljs-variable">${package}</span>
<p>If you're not in China:</p>
<ul>
<li>
<p><a href="https://github.com/dragonflyoss/Seata/releases/download/v0.2.0/df-client_0.2.0_linux_amd64.tar.gz">Linux 64-bit</a>: <code>https://github.com/dragonflyoss/Seata/releases/download/v0.2.0/df-client_0.2.0_linux_amd64.tar.gz</code></p>
<p><a href="https://github.com/dragonflyoss/Fescar/releases/download/v0.2.0/df-client_0.2.0_linux_amd64.tar.gz">Linux 64-bit</a>: <code>https://github.com/dragonflyoss/Fescar/releases/download/v0.2.0/df-client_0.2.0_linux_amd64.tar.gz</code></p>
</li>
<li>
<p><a href="https://github.com/dragonflyoss/Seata/releases/download/v0.2.0/df-client_0.2.0_darwin_amd64.tar.gz">MacOS 64-bit</a>: <code>https://github.com/dragonflyoss/Seata/releases/download/v0.2.0/df-client_0.2.0_darwin_amd64.tar.gz</code></p>
<p><a href="https://github.com/dragonflyoss/Fescar/releases/download/v0.2.0/df-client_0.2.0_darwin_amd64.tar.gz">MacOS 64-bit</a>: <code>https://github.com/dragonflyoss/Fescar/releases/download/v0.2.0/df-client_0.2.0_darwin_amd64.tar.gz</code></p>
</li>
</ul>
</li>
@ -124,13 +124,13 @@ tar -zxf df-client_0.2.0_linux_amd64.tar.gz
</li>
</ol>
<h2>Step 3: Downloading Images or Files</h2>
<p>Now that you have started your SuperNode, and installed Seata client, you can start downloading images or general files, both of which are supported by Seata, but with slightly different downloading methods.</p>
<h3>Use Case 1: Downloading a General File with Seata</h3>
<p>Once you have installed the Seata client, you can use the <code>dfget</code> command to download a file.</p>
<pre><code class="language-bash">dfget -u <span class="hljs-string">'https://github.com/dragonflyoss/Seata/blob/master/docs/images/logo.png'</span> -o /tmp/logo.png
<p>Now that you have started your SuperNode, and installed Fescar client, you can start downloading images or general files, both of which are supported by Fescar, but with slightly different downloading methods.</p>
<h3>Use Case 1: Downloading a General File with Fescar</h3>
<p>Once you have installed the Fescar client, you can use the <code>dfget</code> command to download a file.</p>
<pre><code class="language-bash">dfget -u <span class="hljs-string">'https://github.com/dragonflyoss/Fescar/blob/master/docs/images/logo.png'</span> -o /tmp/logo.png
</code></pre>
<p><strong>Tip:</strong> For more information on the dfget command, see <a href="cli_ref/dfget.md">dfget</a>.</p>
<h3>Use Case 2: Pulling an Image with Seata</h3>
<h3>Use Case 2: Pulling an Image with Fescar</h3>
<ol>
<li>
<p>Start <code>dfdaemon</code> with a specified registry, such as <code>https://index.docker.io</code>.</p>
@ -148,7 +148,7 @@ tar -zxf df-client_0.2.0_linux_amd64.tar.gz
</code></pre>
</li>
<li>
<p>Download an image with Seata.</p>
<p>Download an image with Fescar.</p>
<pre><code class="language-bash">docker pull nginx:latest
</code></pre>
</li>
@ -161,7 +161,7 @@ tar -zxf df-client_0.2.0_linux_amd64.tar.gz
<li><a href="userguide/supernode_configuration.md">SuperNode Configuration</a></li>
<li><a href="cli_ref/dfget.md">Dfget</a></li>
</ul>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Seata is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_seata.html" target="_self">What is Seata?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Seata</span></div></div></footer></div></div>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Fescar is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">What is Fescar?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Fescar</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>

File diff suppressed because one or more lines are too long

View File

@ -12,8 +12,8 @@
<link rel="stylesheet" href="/build/documentation.css" />
</head>
<body>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/en-us/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal"></span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/en-us/index.html" target="_self">HOME</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/en-us/docs/overview/what_is_seata.html" target="_self">DOCS</a></li><li class="menu-item menu-item-normal"><a href="/en-us/blog/index.html" target="_self">BLOG</a></li><li class="menu-item menu-item-normal"><a href="/en-us/community/index.html" target="_self">COMMUNITY</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>Documentation</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Seata</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>Overview<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/what_is_seata.html" target="_self">What is Seata?</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/terminology.html" target="_self">Terminology</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></li><li style="height:180px;overflow:hidden" class="menu-item menu-item-level-2"><span>User Guide<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_server.html" target="_self">Installing Server</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_client.html" target="_self">Installing Client</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/download_files.html" target="_self">Downloading Files</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/supernode_configuration.html" target="_self">Supernode Configuration</a></li></ul></li><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>CLI Reference<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfdaemon.html" target="_self">dfdaemon</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfget.html" target="_self">dfget</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/api.html" target="_self">API Reference</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/faq.html" target="_self">FAQ</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>Downloading Files with Seata</h1>
<p>Things are done differently when you download container images and download general files with Seata.</p>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/en-us/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal"></span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/en-us/index.html" target="_self">HOME</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">DOCS</a></li><li class="menu-item menu-item-normal"><a href="/en-us/blog/index.html" target="_self">BLOG</a></li><li class="menu-item menu-item-normal"><a href="/en-us/community/index.html" target="_self">COMMUNITY</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>Documentation</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Fescar</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>Overview<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">What is Fescar?</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/terminology.html" target="_self">Terminology</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></li><li style="height:180px;overflow:hidden" class="menu-item menu-item-level-2"><span>User Guide<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_server.html" target="_self">Installing Server</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_client.html" target="_self">Installing Client</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/download_files.html" target="_self">Downloading Files</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/supernode_configuration.html" target="_self">Supernode Configuration</a></li></ul></li><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>CLI Reference<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfdaemon.html" target="_self">dfdaemon</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfget.html" target="_self">dfget</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/api.html" target="_self">API Reference</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/faq.html" target="_self">FAQ</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>Downloading Files with Fescar</h1>
<p>Things are done differently when you download container images and download general files with Fescar.</p>
<h2>Prerequisites</h2>
<ul>
<li>
@ -31,7 +31,7 @@
<ol>
<li>
<p>Specify the supernodes.</p>
<p>a. Open the Seata configuration file.</p>
<p>a. Open the Fescar configuration file.</p>
<pre><code class="language-sh">vi /etc/dragonfly.conf
</code></pre>
<p>b. Add the IP of supernodes separated by comma to the configuration file.</p>
@ -62,7 +62,7 @@ tailf ~/.small-dragonfly/logs/dfdaemon.log
</code></pre>
</li>
<li>
<p>Download an image with Seata.</p>
<p>Download an image with Fescar.</p>
<pre><code class="language-bash">docker pull {imageName}
</code></pre>
<p><strong>Note:</strong> Don't include the image repo URL in {imageName}, because the repo URL has been specified with the <code>registry</code> parameter when starting dfdaemon.</p>
@ -75,7 +75,7 @@ tailf ~/.small-dragonfly/logs/dfdaemon.log
<ul>
<li>
<p>Specifying with the configuration file.</p>
<pre><code class="language-sh"><span class="hljs-comment"># Open the Seata configuration file.</span>
<pre><code class="language-sh"><span class="hljs-comment"># Open the Fescar configuration file.</span>
vi /etc/dragonfly.conf
<span class="hljs-comment"># Add the IP of supernodes separated by comma to the configuration file</span>
@ -92,7 +92,7 @@ address=nodeIp1,nodeIp2
</ul>
</li>
<li>
<p>Download general files with Seata in one of the following ways.</p>
<p>Download general files with Fescar in one of the following ways.</p>
<ul>
<li>
<p>Download files with the default <code>/etc/dragonfly.conf</code> configuration.</p>
@ -115,7 +115,7 @@ address=nodeIp1,nodeIp2
</ol>
<h2>After this Task</h2>
<p>To review the downloading log, run <code>less ~/.small-dragonfly/logs/dfclient.log</code>.</p>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Seata is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_seata.html" target="_self">What is Seata?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Seata</span></div></div></footer></div></div>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Fescar is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">What is Fescar?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Fescar</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>

View File

@ -1,6 +1,6 @@
{
"filename": "download_files.md",
"__html": "<h1>Downloading Files with Seata</h1>\n<p>Things are done differently when you download container images and download general files with Seata.</p>\n<h2>Prerequisites</h2>\n<ul>\n<li>\n<p>You are using Linux operating system.</p>\n</li>\n<li>\n<p>You have installed Python 2.7+, and added the Python directory to the <code>PATH</code> environment variable.</p>\n</li>\n<li>\n<p>The SuperNode service is started.</p>\n<p><strong>Tip:</strong> For more information on the dfget command, see <a href=\"../cli_ref/dfget.md\">dfget</a>. For more information on the installation of supernodes, see <a href=\"install_server.md\">Installing Server</a>.</p>\n</li>\n</ul>\n<h2>Downloading container images</h2>\n<ol>\n<li>\n<p>Specify the supernodes.</p>\n<p>a. Open the Seata configuration file.</p>\n<pre><code class=\"language-sh\">vi /etc/dragonfly.conf\n</code></pre>\n<p>b. Add the IP of supernodes separated by comma to the configuration file.</p>\n<pre><code class=\"language-sh\">[node]\naddress=nodeIp1,nodeIp2\n</code></pre>\n</li>\n<li>\n<p>Start the dfget proxy (dfdaemon).</p>\n<pre><code class=\"language-sh\"><span class=\"hljs-comment\"># Start dfdaemon and specify the image repo URL. The default port is `65001`.</span>\ndfdaemon --registry https://xxx.xx.x\n<span class=\"hljs-comment\"># Review dfdaemon logs</span>\ntailf ~/.small-dragonfly/logs/dfdaemon.log\n</code></pre>\n<p><strong>Tip:</strong> To list all available parameters for dfdaemon, run <code>dfdeaemon -h</code>.</p>\n</li>\n<li>\n<p>Configure the Daemon Mirror.</p>\n<p>a. Modify the configuration file <code>/etc/docker/daemon.json</code>.</p>\n<pre><code class=\"language-sh\">vi /etc/docker/daemon.json\n</code></pre>\n<p><strong>Tip:</strong> For more information on <code>/etc/docker/daemon.json</code>, see <a href=\"https://docs.docker.com/registry/recipes/mirror/#configure-the-cache\">Docker documentation</a>.</p>\n<p>b. Add or update the configuration item <code>registry-mirrors</code> in the configuration file.</p>\n<pre><code class=\"language-sh\"><span class=\"hljs-string\">\"registry-mirrors\"</span>: [<span class=\"hljs-string\">\"http://127.0.0.1:65001\"</span>]\n</code></pre>\n<p>c. Restart Docker daemon.</p>\n<pre><code class=\"language-bash\">systemctl restart docker\n</code></pre>\n</li>\n<li>\n<p>Download an image with Seata.</p>\n<pre><code class=\"language-bash\">docker pull {imageName}\n</code></pre>\n<p><strong>Note:</strong> Don't include the image repo URL in {imageName}, because the repo URL has been specified with the <code>registry</code> parameter when starting dfdaemon.</p>\n</li>\n</ol>\n<h2>Downloading General Files</h2>\n<ol>\n<li>\n<p>Specify the supernodes in one of the following ways.</p>\n<ul>\n<li>\n<p>Specifying with the configuration file.</p>\n<pre><code class=\"language-sh\"><span class=\"hljs-comment\"># Open the Seata configuration file.</span>\nvi /etc/dragonfly.conf\n\n<span class=\"hljs-comment\"># Add the IP of supernodes separated by comma to the configuration file</span>\n[node]\naddress=nodeIp1,nodeIp2\n</code></pre>\n</li>\n<li>\n<p>Specifying with the parameter in the command line.</p>\n<pre><code class=\"language-sh\">dfget -u <span class=\"hljs-string\">\"http://www.taobao.com\"</span> -o /tmp/test.html --node nodeIp1,nodeIp2\n</code></pre>\n<p><strong>Note:</strong> When using this method, you must add the <code>node</code> parameter every time when you run the dfget command. And the parameter in the command line takes precedence over the configuration file.</p>\n</li>\n</ul>\n</li>\n<li>\n<p>Download general files with Seata in one of the following ways.</p>\n<ul>\n<li>\n<p>Download files with the default <code>/etc/dragonfly.conf</code> configuration.</p>\n<pre><code class=\"language-sh\">dfget --url <span class=\"hljs-string\">\"http://xxx.xx.x\"</span>\n</code></pre>\n<p><strong>Tip:</strong> To list all available parameters for dfget, run <code>dfget -h</code>.</p>\n</li>\n<li>\n<p>Download files with your specified supernodes.</p>\n<pre><code class=\"language-sh\">dfget --url <span class=\"hljs-string\">\"http://xxx.xx.x\"</span> --node <span class=\"hljs-string\">\"127.0.0.1\"</span>\n</code></pre>\n</li>\n<li>\n<p>Download files to your specified output file.</p>\n<pre><code class=\"language-sh\">dfget --url <span class=\"hljs-string\">\"http://xxx.xx.x\"</span> -o a.txt\n</code></pre>\n</li>\n</ul>\n</li>\n</ol>\n<h2>After this Task</h2>\n<p>To review the downloading log, run <code>less ~/.small-dragonfly/logs/dfclient.log</code>.</p>\n",
"link": "\\en-us\\docs\\userguide\\download_files.html",
"__html": "<h1>Downloading Files with Fescar</h1>\n<p>Things are done differently when you download container images and download general files with Fescar.</p>\n<h2>Prerequisites</h2>\n<ul>\n<li>\n<p>You are using Linux operating system.</p>\n</li>\n<li>\n<p>You have installed Python 2.7+, and added the Python directory to the <code>PATH</code> environment variable.</p>\n</li>\n<li>\n<p>The SuperNode service is started.</p>\n<p><strong>Tip:</strong> For more information on the dfget command, see <a href=\"../cli_ref/dfget.md\">dfget</a>. For more information on the installation of supernodes, see <a href=\"install_server.md\">Installing Server</a>.</p>\n</li>\n</ul>\n<h2>Downloading container images</h2>\n<ol>\n<li>\n<p>Specify the supernodes.</p>\n<p>a. Open the Fescar configuration file.</p>\n<pre><code class=\"language-sh\">vi /etc/dragonfly.conf\n</code></pre>\n<p>b. Add the IP of supernodes separated by comma to the configuration file.</p>\n<pre><code class=\"language-sh\">[node]\naddress=nodeIp1,nodeIp2\n</code></pre>\n</li>\n<li>\n<p>Start the dfget proxy (dfdaemon).</p>\n<pre><code class=\"language-sh\"><span class=\"hljs-comment\"># Start dfdaemon and specify the image repo URL. The default port is `65001`.</span>\ndfdaemon --registry https://xxx.xx.x\n<span class=\"hljs-comment\"># Review dfdaemon logs</span>\ntailf ~/.small-dragonfly/logs/dfdaemon.log\n</code></pre>\n<p><strong>Tip:</strong> To list all available parameters for dfdaemon, run <code>dfdeaemon -h</code>.</p>\n</li>\n<li>\n<p>Configure the Daemon Mirror.</p>\n<p>a. Modify the configuration file <code>/etc/docker/daemon.json</code>.</p>\n<pre><code class=\"language-sh\">vi /etc/docker/daemon.json\n</code></pre>\n<p><strong>Tip:</strong> For more information on <code>/etc/docker/daemon.json</code>, see <a href=\"https://docs.docker.com/registry/recipes/mirror/#configure-the-cache\">Docker documentation</a>.</p>\n<p>b. Add or update the configuration item <code>registry-mirrors</code> in the configuration file.</p>\n<pre><code class=\"language-sh\"><span class=\"hljs-string\">\"registry-mirrors\"</span>: [<span class=\"hljs-string\">\"http://127.0.0.1:65001\"</span>]\n</code></pre>\n<p>c. Restart Docker daemon.</p>\n<pre><code class=\"language-bash\">systemctl restart docker\n</code></pre>\n</li>\n<li>\n<p>Download an image with Fescar.</p>\n<pre><code class=\"language-bash\">docker pull {imageName}\n</code></pre>\n<p><strong>Note:</strong> Don't include the image repo URL in {imageName}, because the repo URL has been specified with the <code>registry</code> parameter when starting dfdaemon.</p>\n</li>\n</ol>\n<h2>Downloading General Files</h2>\n<ol>\n<li>\n<p>Specify the supernodes in one of the following ways.</p>\n<ul>\n<li>\n<p>Specifying with the configuration file.</p>\n<pre><code class=\"language-sh\"><span class=\"hljs-comment\"># Open the Fescar configuration file.</span>\nvi /etc/dragonfly.conf\n\n<span class=\"hljs-comment\"># Add the IP of supernodes separated by comma to the configuration file</span>\n[node]\naddress=nodeIp1,nodeIp2\n</code></pre>\n</li>\n<li>\n<p>Specifying with the parameter in the command line.</p>\n<pre><code class=\"language-sh\">dfget -u <span class=\"hljs-string\">\"http://www.taobao.com\"</span> -o /tmp/test.html --node nodeIp1,nodeIp2\n</code></pre>\n<p><strong>Note:</strong> When using this method, you must add the <code>node</code> parameter every time when you run the dfget command. And the parameter in the command line takes precedence over the configuration file.</p>\n</li>\n</ul>\n</li>\n<li>\n<p>Download general files with Fescar in one of the following ways.</p>\n<ul>\n<li>\n<p>Download files with the default <code>/etc/dragonfly.conf</code> configuration.</p>\n<pre><code class=\"language-sh\">dfget --url <span class=\"hljs-string\">\"http://xxx.xx.x\"</span>\n</code></pre>\n<p><strong>Tip:</strong> To list all available parameters for dfget, run <code>dfget -h</code>.</p>\n</li>\n<li>\n<p>Download files with your specified supernodes.</p>\n<pre><code class=\"language-sh\">dfget --url <span class=\"hljs-string\">\"http://xxx.xx.x\"</span> --node <span class=\"hljs-string\">\"127.0.0.1\"</span>\n</code></pre>\n</li>\n<li>\n<p>Download files to your specified output file.</p>\n<pre><code class=\"language-sh\">dfget --url <span class=\"hljs-string\">\"http://xxx.xx.x\"</span> -o a.txt\n</code></pre>\n</li>\n</ul>\n</li>\n</ol>\n<h2>After this Task</h2>\n<p>To review the downloading log, run <code>less ~/.small-dragonfly/logs/dfclient.log</code>.</p>\n",
"link": "/en-us/docs/userguide/download_files.html",
"meta": {}
}

View File

@ -12,8 +12,8 @@
<link rel="stylesheet" href="/build/documentation.css" />
</head>
<body>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/en-us/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal"></span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/en-us/index.html" target="_self">HOME</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/en-us/docs/overview/what_is_seata.html" target="_self">DOCS</a></li><li class="menu-item menu-item-normal"><a href="/en-us/blog/index.html" target="_self">BLOG</a></li><li class="menu-item menu-item-normal"><a href="/en-us/community/index.html" target="_self">COMMUNITY</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>Documentation</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Seata</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>Overview<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/what_is_seata.html" target="_self">What is Seata?</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/terminology.html" target="_self">Terminology</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></li><li style="height:180px;overflow:hidden" class="menu-item menu-item-level-2"><span>User Guide<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_server.html" target="_self">Installing Server</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_client.html" target="_self">Installing Client</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/download_files.html" target="_self">Downloading Files</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/supernode_configuration.html" target="_self">Supernode Configuration</a></li></ul></li><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>CLI Reference<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfdaemon.html" target="_self">dfdaemon</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfget.html" target="_self">dfget</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/api.html" target="_self">API Reference</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/faq.html" target="_self">FAQ</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>Installing Seata Client</h1>
<p>You have three options when installing the Seata client: installing from the latest package, installing by pulling the image, or installing from the source code.</p>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/en-us/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal"></span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/en-us/index.html" target="_self">HOME</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">DOCS</a></li><li class="menu-item menu-item-normal"><a href="/en-us/blog/index.html" target="_self">BLOG</a></li><li class="menu-item menu-item-normal"><a href="/en-us/community/index.html" target="_self">COMMUNITY</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>Documentation</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Fescar</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>Overview<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">What is Fescar?</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/terminology.html" target="_self">Terminology</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></li><li style="height:180px;overflow:hidden" class="menu-item menu-item-level-2"><span>User Guide<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_server.html" target="_self">Installing Server</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_client.html" target="_self">Installing Client</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/download_files.html" target="_self">Downloading Files</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/supernode_configuration.html" target="_self">Supernode Configuration</a></li></ul></li><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>CLI Reference<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfdaemon.html" target="_self">dfdaemon</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfget.html" target="_self">dfget</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/api.html" target="_self">API Reference</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/faq.html" target="_self">FAQ</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>Installing Fescar Client</h1>
<p>You have three options when installing the Fescar client: installing from the latest package, installing by pulling the image, or installing from the source code.</p>
<h2>Installing from the Latest Package</h2>
<p>You can install from the latest packages we provided.</p>
<ol>
@ -40,10 +40,10 @@ wget <span class="hljs-variable">${package}</span>
<p>If you're not in China:</p>
<ul>
<li>
<p><a href="https://github.com/dragonflyoss/Seata/releases/download/v0.2.0/df-client_0.2.0_linux_amd64.tar.gz">Linux 64-bit</a>: <code>https://github.com/dragonflyoss/Seata/releases/download/v0.2.0/df-client_0.2.0_linux_amd64.tar.gz</code></p>
<p><a href="https://github.com/dragonflyoss/Fescar/releases/download/v0.2.0/df-client_0.2.0_linux_amd64.tar.gz">Linux 64-bit</a>: <code>https://github.com/dragonflyoss/Fescar/releases/download/v0.2.0/df-client_0.2.0_linux_amd64.tar.gz</code></p>
</li>
<li>
<p><a href="https://github.com/dragonflyoss/Seata/releases/download/v0.2.0/df-client_0.2.0_darwin_amd64.tar.gz">MacOS 64-bit</a>: <code>https://github.com/dragonflyoss/Seata/releases/download/v0.2.0/df-client_0.2.0_darwin_amd64.tar.gz</code></p>
<p><a href="https://github.com/dragonflyoss/Fescar/releases/download/v0.2.0/df-client_0.2.0_darwin_amd64.tar.gz">MacOS 64-bit</a>: <code>https://github.com/dragonflyoss/Fescar/releases/download/v0.2.0/df-client_0.2.0_darwin_amd64.tar.gz</code></p>
</li>
</ul>
</li>
@ -95,13 +95,13 @@ tar -zxf df-client_0.2.0_linux_amd64.tar.gz -C xxx
<h3>Installing in $HOME/.dragonfly</h3>
<ol>
<li>
<p>Obtain the source code of Seata.</p>
<pre><code class="language-sh">git <span class="hljs-built_in">clone</span> https://github.com/dragonflyoss/Seata.git
<p>Obtain the source code of Fescar.</p>
<pre><code class="language-sh">git <span class="hljs-built_in">clone</span> https://github.com/dragonflyoss/Fescar.git
</code></pre>
</li>
<li>
<p>Enter the target directory.</p>
<pre><code class="language-sh"><span class="hljs-built_in">cd</span> Seata
<pre><code class="language-sh"><span class="hljs-built_in">cd</span> Fescar
</code></pre>
</li>
<li>
@ -119,13 +119,13 @@ tar -zxf df-client_0.2.0_linux_amd64.tar.gz -C xxx
<h3>Installing in Another Directory</h3>
<ol>
<li>
<p>Obtain the source code of Seata.</p>
<pre><code class="language-sh">git <span class="hljs-built_in">clone</span> https://github.com/dragonflyoss/Seata.git
<p>Obtain the source code of Fescar.</p>
<pre><code class="language-sh">git <span class="hljs-built_in">clone</span> https://github.com/dragonflyoss/Fescar.git
</code></pre>
</li>
<li>
<p>Enter the target directory.</p>
<pre><code class="language-sh"><span class="hljs-built_in">cd</span> Seata/build/client
<pre><code class="language-sh"><span class="hljs-built_in">cd</span> Fescar/build/client
</code></pre>
</li>
<li>
@ -145,7 +145,7 @@ make &amp;&amp; make install
<p>Test if the downloading works.</p>
<pre><code class="language-sh">dfget --url <span class="hljs-string">"http://<span class="hljs-variable">${resourceUrl}</span>"</span> --output ./resource.png --node <span class="hljs-string">"127.0.0.1"</span>
</code></pre>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Seata is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_seata.html" target="_self">What is Seata?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Seata</span></div></div></footer></div></div>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Fescar is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">What is Fescar?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Fescar</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>

File diff suppressed because one or more lines are too long

View File

@ -12,11 +12,11 @@
<link rel="stylesheet" href="/build/documentation.css" />
</head>
<body>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/en-us/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal"></span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/en-us/index.html" target="_self">HOME</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/en-us/docs/overview/what_is_seata.html" target="_self">DOCS</a></li><li class="menu-item menu-item-normal"><a href="/en-us/blog/index.html" target="_self">BLOG</a></li><li class="menu-item menu-item-normal"><a href="/en-us/community/index.html" target="_self">COMMUNITY</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>Documentation</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Seata</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>Overview<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/what_is_seata.html" target="_self">What is Seata?</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/terminology.html" target="_self">Terminology</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></li><li style="height:180px;overflow:hidden" class="menu-item menu-item-level-2"><span>User Guide<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_server.html" target="_self">Installing Server</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_client.html" target="_self">Installing Client</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/download_files.html" target="_self">Downloading Files</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/supernode_configuration.html" target="_self">Supernode Configuration</a></li></ul></li><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>CLI Reference<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfdaemon.html" target="_self">dfdaemon</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfget.html" target="_self">dfget</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/api.html" target="_self">API Reference</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/faq.html" target="_self">FAQ</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>Installing Seata Server</h1>
<p>This topic explains how to install the Seata server.</p>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/en-us/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal"></span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/en-us/index.html" target="_self">HOME</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">DOCS</a></li><li class="menu-item menu-item-normal"><a href="/en-us/blog/index.html" target="_self">BLOG</a></li><li class="menu-item menu-item-normal"><a href="/en-us/community/index.html" target="_self">COMMUNITY</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>Documentation</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Fescar</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>Overview<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">What is Fescar?</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/terminology.html" target="_self">Terminology</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></li><li style="height:180px;overflow:hidden" class="menu-item menu-item-level-2"><span>User Guide<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_server.html" target="_self">Installing Server</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_client.html" target="_self">Installing Client</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/download_files.html" target="_self">Downloading Files</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/supernode_configuration.html" target="_self">Supernode Configuration</a></li></ul></li><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>CLI Reference<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfdaemon.html" target="_self">dfdaemon</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfget.html" target="_self">dfget</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/api.html" target="_self">API Reference</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/faq.html" target="_self">FAQ</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>Installing Fescar Server</h1>
<p>This topic explains how to install the Fescar server.</p>
<p><strong>Tip:</strong> For a data center or a cluster, we recommend that you use at least two machines with eight cores, 16GB RAM and Gigabit Ethernet connections for deploying supernodes.</p>
<h2>Context</h2>
<p>There are two layers in Seatas architecture: server (supernodes) and client (hosts). Install the supernodes in one of the following ways:</p>
<p>There are two layers in Fescars architecture: server (supernodes) and client (hosts). Install the supernodes in one of the following ways:</p>
<ul>
<li>Deploying with Docker: Recommended for quick local deployment and test.</li>
<li>Deploying with physical machines: Recommended for production usage.</li>
@ -71,13 +71,13 @@
<h2>Procedure - When Deploying with Docker</h2>
<ol>
<li>
<p>Obtain the source code of Seata.</p>
<pre><code class="language-sh">git <span class="hljs-built_in">clone</span> https://github.com/dragonflyoss/Seata.git
<p>Obtain the source code of Fescar.</p>
<pre><code class="language-sh">git <span class="hljs-built_in">clone</span> https://github.com/dragonflyoss/Fescar.git
</code></pre>
</li>
<li>
<p>Enter the project directory.</p>
<pre><code class="language-sh"><span class="hljs-built_in">cd</span> Seata
<pre><code class="language-sh"><span class="hljs-built_in">cd</span> Fescar
</code></pre>
</li>
<li>
@ -100,13 +100,13 @@ docker run -d -p 8001:8001 -p 8002:8002 <span class="hljs-variable">${supernodeD
<h2>Procedure - When Deploying with Physical Machines</h2>
<ol>
<li>
<p>Obtain the source code of Seata.</p>
<pre><code class="language-sh">git <span class="hljs-built_in">clone</span> https://github.com/dragonflyoss/Seata.git
<p>Obtain the source code of Fescar.</p>
<pre><code class="language-sh">git <span class="hljs-built_in">clone</span> https://github.com/dragonflyoss/Fescar.git
</code></pre>
</li>
<li>
<p>Enter the project directory.</p>
<pre><code class="language-sh"><span class="hljs-built_in">cd</span> Seata/src/supernode
<pre><code class="language-sh"><span class="hljs-built_in">cd</span> Fescar/src/supernode
</code></pre>
</li>
<li>
@ -156,12 +156,12 @@ telent 127.0.0.1 8002
</code></pre>
</li>
<li>
<p>Install the Seata client and test if the downloading works.</p>
<p>Install the Fescar client and test if the downloading works.</p>
<pre><code class="language-sh">dfget --url <span class="hljs-string">"http://<span class="hljs-variable">${resourceUrl}</span>"</span> --output ./resource.png --node <span class="hljs-string">"127.0.0.1"</span>
</code></pre>
</li>
</ul>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Seata is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_seata.html" target="_self">What is Seata?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Seata</span></div></div></footer></div></div>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Fescar is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">What is Fescar?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Fescar</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>

View File

@ -1,6 +1,6 @@
{
"filename": "install_server.md",
"__html": "<h1>Installing Seata Server</h1>\n<p>This topic explains how to install the Seata server.</p>\n<p><strong>Tip:</strong> For a data center or a cluster, we recommend that you use at least two machines with eight cores, 16GB RAM and Gigabit Ethernet connections for deploying supernodes.</p>\n<h2>Context</h2>\n<p>There are two layers in Seatas architecture: server (supernodes) and client (hosts). Install the supernodes in one of the following ways:</p>\n<ul>\n<li>Deploying with Docker: Recommended for quick local deployment and test.</li>\n<li>Deploying with physical machines: Recommended for production usage.</li>\n</ul>\n<h2>Prerequisites</h2>\n<p>When deploying with Docker, the following conditions must be met.</p>\n<table>\n<thead>\n<tr>\n<th>Required Software</th>\n<th>Version Limit</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Git</td>\n<td>1.9.1+</td>\n</tr>\n<tr>\n<td>Docker</td>\n<td>1.12.0+</td>\n</tr>\n</tbody>\n</table>\n<p>When deploying with physical machines, the following conditions must be met.</p>\n<table>\n<thead>\n<tr>\n<th>Required Software</th>\n<th>Version Limit</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Git</td>\n<td>1.9.1+</td>\n</tr>\n<tr>\n<td>JDK</td>\n<td>1.7+</td>\n</tr>\n<tr>\n<td>Maven</td>\n<td>3.0.3+</td>\n</tr>\n<tr>\n<td>Nginx</td>\n<td>0.8+</td>\n</tr>\n</tbody>\n</table>\n<h2>Procedure - When Deploying with Docker</h2>\n<ol>\n<li>\n<p>Obtain the source code of Seata.</p>\n<pre><code class=\"language-sh\">git <span class=\"hljs-built_in\">clone</span> https://github.com/dragonflyoss/Seata.git\n</code></pre>\n</li>\n<li>\n<p>Enter the project directory.</p>\n<pre><code class=\"language-sh\"><span class=\"hljs-built_in\">cd</span> Seata\n</code></pre>\n</li>\n<li>\n<p>Build the Docker image.</p>\n<pre><code class=\"language-sh\">./build/build.sh supernode\n</code></pre>\n</li>\n<li>\n<p>Obtain the latest Docker image ID of the SuperNode.</p>\n<pre><code class=\"language-sh\">docker image ls|grep <span class=\"hljs-string\">'supernode'</span> |awk <span class=\"hljs-string\">'{print $3}'</span> | head -n1\n</code></pre>\n</li>\n<li>\n<p>Start the SuperNode.</p>\n<pre><code class=\"language-sh\"><span class=\"hljs-comment\"># Replace ${supernodeDockerImageId} with the ID obtained at the previous step</span>\ndocker run -d -p 8001:8001 -p 8002:8002 <span class=\"hljs-variable\">${supernodeDockerImageId}</span>\n</code></pre>\n</li>\n</ol>\n<h2>Procedure - When Deploying with Physical Machines</h2>\n<ol>\n<li>\n<p>Obtain the source code of Seata.</p>\n<pre><code class=\"language-sh\">git <span class=\"hljs-built_in\">clone</span> https://github.com/dragonflyoss/Seata.git\n</code></pre>\n</li>\n<li>\n<p>Enter the project directory.</p>\n<pre><code class=\"language-sh\"><span class=\"hljs-built_in\">cd</span> Seata/src/supernode\n</code></pre>\n</li>\n<li>\n<p>Compile the source code.</p>\n<pre><code class=\"language-sh\">mvn clean -U install -DskipTests=<span class=\"hljs-literal\">true</span>\n</code></pre>\n</li>\n<li>\n<p>Start the SuperNode.</p>\n<pre><code class=\"language-sh\"><span class=\"hljs-comment\"># If the 'supernode.baseHome is not specified, then the default value '/home/admin/supernode will be used.</span>\njava -Dsupernode.baseHome=/home/admin/supernode -jar target/supernode.jar\n</code></pre>\n</li>\n<li>\n<p>Add the following configuration items to the Nginx configuration file.</p>\n<p><strong>Tip:</strong> The path of the Nginx configuration file is something like <code>src/supernode/src/main/docker/sources/nginx.conf</code>.</p>\n<pre><code>server {\nlisten 8001;\nlocation / {\n # Must be ${supernode.baseHome}/repo\n root /home/admin/supernode/repo;\n }\n}\n\nserver {\nlisten 8002;\nlocation /peer {\n proxy_pass http://127.0.0.1:8080;\n }\n}\n</code></pre>\n</li>\n<li>\n<p>Start Nginx.</p>\n<pre><code class=\"language-sh\">sudo nginx\n</code></pre>\n</li>\n</ol>\n<h2>After this Task</h2>\n<ul>\n<li>\n<p>After the SuperNode is installed, run the following commands to verify if Nginx and Tomcat are started, and if Port <code>8001</code> and <code>8002</code> are available.</p>\n<pre><code class=\"language-sh\">ps aux|grep nginx\nps aux|grep tomcat\ntelnet 127.0.0.1 8001\ntelent 127.0.0.1 8002\n</code></pre>\n</li>\n<li>\n<p>Install the Seata client and test if the downloading works.</p>\n<pre><code class=\"language-sh\">dfget --url <span class=\"hljs-string\">\"http://<span class=\"hljs-variable\">${resourceUrl}</span>\"</span> --output ./resource.png --node <span class=\"hljs-string\">\"127.0.0.1\"</span>\n</code></pre>\n</li>\n</ul>\n",
"link": "\\en-us\\docs\\userguide\\install_server.html",
"__html": "<h1>Installing Fescar Server</h1>\n<p>This topic explains how to install the Fescar server.</p>\n<p><strong>Tip:</strong> For a data center or a cluster, we recommend that you use at least two machines with eight cores, 16GB RAM and Gigabit Ethernet connections for deploying supernodes.</p>\n<h2>Context</h2>\n<p>There are two layers in Fescars architecture: server (supernodes) and client (hosts). Install the supernodes in one of the following ways:</p>\n<ul>\n<li>Deploying with Docker: Recommended for quick local deployment and test.</li>\n<li>Deploying with physical machines: Recommended for production usage.</li>\n</ul>\n<h2>Prerequisites</h2>\n<p>When deploying with Docker, the following conditions must be met.</p>\n<table>\n<thead>\n<tr>\n<th>Required Software</th>\n<th>Version Limit</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Git</td>\n<td>1.9.1+</td>\n</tr>\n<tr>\n<td>Docker</td>\n<td>1.12.0+</td>\n</tr>\n</tbody>\n</table>\n<p>When deploying with physical machines, the following conditions must be met.</p>\n<table>\n<thead>\n<tr>\n<th>Required Software</th>\n<th>Version Limit</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Git</td>\n<td>1.9.1+</td>\n</tr>\n<tr>\n<td>JDK</td>\n<td>1.7+</td>\n</tr>\n<tr>\n<td>Maven</td>\n<td>3.0.3+</td>\n</tr>\n<tr>\n<td>Nginx</td>\n<td>0.8+</td>\n</tr>\n</tbody>\n</table>\n<h2>Procedure - When Deploying with Docker</h2>\n<ol>\n<li>\n<p>Obtain the source code of Fescar.</p>\n<pre><code class=\"language-sh\">git <span class=\"hljs-built_in\">clone</span> https://github.com/dragonflyoss/Fescar.git\n</code></pre>\n</li>\n<li>\n<p>Enter the project directory.</p>\n<pre><code class=\"language-sh\"><span class=\"hljs-built_in\">cd</span> Fescar\n</code></pre>\n</li>\n<li>\n<p>Build the Docker image.</p>\n<pre><code class=\"language-sh\">./build/build.sh supernode\n</code></pre>\n</li>\n<li>\n<p>Obtain the latest Docker image ID of the SuperNode.</p>\n<pre><code class=\"language-sh\">docker image ls|grep <span class=\"hljs-string\">'supernode'</span> |awk <span class=\"hljs-string\">'{print $3}'</span> | head -n1\n</code></pre>\n</li>\n<li>\n<p>Start the SuperNode.</p>\n<pre><code class=\"language-sh\"><span class=\"hljs-comment\"># Replace ${supernodeDockerImageId} with the ID obtained at the previous step</span>\ndocker run -d -p 8001:8001 -p 8002:8002 <span class=\"hljs-variable\">${supernodeDockerImageId}</span>\n</code></pre>\n</li>\n</ol>\n<h2>Procedure - When Deploying with Physical Machines</h2>\n<ol>\n<li>\n<p>Obtain the source code of Fescar.</p>\n<pre><code class=\"language-sh\">git <span class=\"hljs-built_in\">clone</span> https://github.com/dragonflyoss/Fescar.git\n</code></pre>\n</li>\n<li>\n<p>Enter the project directory.</p>\n<pre><code class=\"language-sh\"><span class=\"hljs-built_in\">cd</span> Fescar/src/supernode\n</code></pre>\n</li>\n<li>\n<p>Compile the source code.</p>\n<pre><code class=\"language-sh\">mvn clean -U install -DskipTests=<span class=\"hljs-literal\">true</span>\n</code></pre>\n</li>\n<li>\n<p>Start the SuperNode.</p>\n<pre><code class=\"language-sh\"><span class=\"hljs-comment\"># If the 'supernode.baseHome is not specified, then the default value '/home/admin/supernode will be used.</span>\njava -Dsupernode.baseHome=/home/admin/supernode -jar target/supernode.jar\n</code></pre>\n</li>\n<li>\n<p>Add the following configuration items to the Nginx configuration file.</p>\n<p><strong>Tip:</strong> The path of the Nginx configuration file is something like <code>src/supernode/src/main/docker/sources/nginx.conf</code>.</p>\n<pre><code>server {\nlisten 8001;\nlocation / {\n # Must be ${supernode.baseHome}/repo\n root /home/admin/supernode/repo;\n }\n}\n\nserver {\nlisten 8002;\nlocation /peer {\n proxy_pass http://127.0.0.1:8080;\n }\n}\n</code></pre>\n</li>\n<li>\n<p>Start Nginx.</p>\n<pre><code class=\"language-sh\">sudo nginx\n</code></pre>\n</li>\n</ol>\n<h2>After this Task</h2>\n<ul>\n<li>\n<p>After the SuperNode is installed, run the following commands to verify if Nginx and Tomcat are started, and if Port <code>8001</code> and <code>8002</code> are available.</p>\n<pre><code class=\"language-sh\">ps aux|grep nginx\nps aux|grep tomcat\ntelnet 127.0.0.1 8001\ntelent 127.0.0.1 8002\n</code></pre>\n</li>\n<li>\n<p>Install the Fescar client and test if the downloading works.</p>\n<pre><code class=\"language-sh\">dfget --url <span class=\"hljs-string\">\"http://<span class=\"hljs-variable\">${resourceUrl}</span>\"</span> --output ./resource.png --node <span class=\"hljs-string\">\"127.0.0.1\"</span>\n</code></pre>\n</li>\n</ul>\n",
"link": "/en-us/docs/userguide/install_server.html",
"meta": {}
}

View File

@ -12,7 +12,7 @@
<link rel="stylesheet" href="/build/documentation.css" />
</head>
<body>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/en-us/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal"></span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/en-us/index.html" target="_self">HOME</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/en-us/docs/overview/what_is_seata.html" target="_self">DOCS</a></li><li class="menu-item menu-item-normal"><a href="/en-us/blog/index.html" target="_self">BLOG</a></li><li class="menu-item menu-item-normal"><a href="/en-us/community/index.html" target="_self">COMMUNITY</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>Documentation</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Seata</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>Overview<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/what_is_seata.html" target="_self">What is Seata?</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/terminology.html" target="_self">Terminology</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></li><li style="height:180px;overflow:hidden" class="menu-item menu-item-level-2"><span>User Guide<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_server.html" target="_self">Installing Server</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_client.html" target="_self">Installing Client</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/download_files.html" target="_self">Downloading Files</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/supernode_configuration.html" target="_self">Supernode Configuration</a></li></ul></li><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>CLI Reference<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfdaemon.html" target="_self">dfdaemon</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfget.html" target="_self">dfget</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/api.html" target="_self">API Reference</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/faq.html" target="_self">FAQ</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>Seata SuperNode Configuration</h1>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/en-us/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal"></span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/en-us/index.html" target="_self">HOME</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">DOCS</a></li><li class="menu-item menu-item-normal"><a href="/en-us/blog/index.html" target="_self">BLOG</a></li><li class="menu-item menu-item-normal"><a href="/en-us/community/index.html" target="_self">COMMUNITY</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>Documentation</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Fescar</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>Overview<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">What is Fescar?</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/overview/terminology.html" target="_self">Terminology</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></li><li style="height:180px;overflow:hidden" class="menu-item menu-item-level-2"><span>User Guide<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_server.html" target="_self">Installing Server</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/install_client.html" target="_self">Installing Client</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/download_files.html" target="_self">Downloading Files</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/userguide/supernode_configuration.html" target="_self">Supernode Configuration</a></li></ul></li><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>CLI Reference<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfdaemon.html" target="_self">dfdaemon</a></li><li class="menu-item menu-item-level-3"><a href="/en-us/docs/cli_ref/dfget.html" target="_self">dfget</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/api.html" target="_self">API Reference</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/en-us/docs/faq.html" target="_self">FAQ</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>Fescar SuperNode Configuration</h1>
<p>The SuperNode is written in Java based on Spring Boot. You can easily set properties with command line parameters or with the configuration file.</p>
<h2>SuperNode Properties</h2>
<h3>Simple Property</h3>
@ -84,9 +84,9 @@
<ul>
<li>
<p>Config it in <code>.properties</code> file, for example:</p>
<pre><code class="language-ini"><span class="hljs-attr">supernode.cluster[0].ip</span> = <span class="hljs-string">'192.168.0.1'</span>
<span class="hljs-attr">supernode.cluster[0].registerPort</span> = <span class="hljs-number">8001</span>
<span class="hljs-attr">supernode.cluster[1].ip</span> = <span class="hljs-string">'192.168.0.2'</span>
<pre><code class="language-ini">supernode.cluster[0].ip = '192.168.0.1'
supernode.cluster[0].registerPort = 8001
supernode.cluster[1].ip = '192.168.0.2'
</code></pre>
</li>
<li>
@ -113,7 +113,7 @@
</code></pre>
</li>
</ul>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Seata is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_seata.html" target="_self">What is Seata?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Seata</span></div></div></footer></div></div>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>Vision</h3><p>Fescar is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.</p></div><div class="col col-6"><dl><dt>Documentation</dt><dd><a href="/en-us/docs/overview/what_is_fescar.html" target="_self">What is Fescar?</a></dd><dd><a href="/en-us/docs/quickstart.html" target="_self">Quick Start</a></dd></dl></div><div class="col col-6"><dl><dt>Resources</dt><dd><a href="/en-us/blog/index.html" target="_self">Blog</a></dd><dd><a href="/en-us/community/index.html" target="_self">Community</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Fescar</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>

View File

@ -1,6 +1,6 @@
{
"filename": "supernode_configuration.md",
"__html": "<h1>Seata SuperNode Configuration</h1>\n<p>The SuperNode is written in Java based on Spring Boot. You can easily set properties with command line parameters or with the configuration file.</p>\n<h2>SuperNode Properties</h2>\n<h3>Simple Property</h3>\n<table>\n<thead>\n<tr>\n<th>Property Name</th>\n<th>Default Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>supernode.baseHome</td>\n<td>/home/admin/supernode</td>\n<td>Working directory of the SuperNode</td>\n</tr>\n<tr>\n<td>supernode.systemNeedRate</td>\n<td>20</td>\n<td>Network rate reserved for the system (Unit: MB/s)</td>\n</tr>\n<tr>\n<td>supernode.totalLimit</td>\n<td>200</td>\n<td>Network rate reserved for the SuperNode (Unit: MB/s)</td>\n</tr>\n<tr>\n<td>supernode.schedulerCorePoolSize</td>\n<td>10</td>\n<td>Core pool size of ScheduledExecutorService</td>\n</tr>\n<tr>\n<td>supernode.dfgetPath</td>\n<td>/usr/local/bin/dfget/</td>\n<td>The <code>dfget</code> path</td>\n</tr>\n</tbody>\n</table>\n<h3>Cluster Property</h3>\n<h4>supernode.cluster</h4>\n<p>This is an array property, and every member of it has these attributes:</p>\n<table>\n<thead>\n<tr>\n<th>Name</th>\n<th>Default Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>ip</td>\n<td>None</td>\n<td>The ip of the cluster member.</td>\n</tr>\n<tr>\n<td>registerPort</td>\n<td>8001</td>\n<td>The register port of the cluster member.</td>\n</tr>\n<tr>\n<td>downloadPort</td>\n<td>8002</td>\n<td>The download port of the cluster member.</td>\n</tr>\n</tbody>\n</table>\n<ul>\n<li>\n<p>Config it in <code>.properties</code> file, for example:</p>\n<pre><code class=\"language-ini\"><span class=\"hljs-attr\">supernode.cluster[0].ip</span> = <span class=\"hljs-string\">'192.168.0.1'</span>\n<span class=\"hljs-attr\">supernode.cluster[0].registerPort</span> = <span class=\"hljs-number\">8001</span>\n<span class=\"hljs-attr\">supernode.cluster[1].ip</span> = <span class=\"hljs-string\">'192.168.0.2'</span>\n</code></pre>\n</li>\n<li>\n<p>Config it in <code>.yaml</code> file, for example:</p>\n<pre><code class=\"language-yaml\"><span class=\"hljs-attr\">supernode:</span>\n<span class=\"hljs-attr\"> cluster:</span>\n<span class=\"hljs-attr\"> - ip:</span> <span class=\"hljs-string\">'192.168.0.1'</span>\n<span class=\"hljs-attr\"> registerPort:</span> <span class=\"hljs-number\">8001</span>\n<span class=\"hljs-attr\"> - ip:</span> <span class=\"hljs-string\">'192.168.0.2'</span>\n</code></pre>\n</li>\n</ul>\n<h2>Setting Properties</h2>\n<p>You have two options when setting properties of a SuperNode.</p>\n<ul>\n<li>\n<p>Setting properties with command line parameters.</p>\n<pre><code class=\"language-bash\">java -D&lt;propertyName&gt;=&lt;propertyValue&gt; -jar supernode.jar\n</code></pre>\n</li>\n<li>\n<p>Setting properties with the configuration file.</p>\n<pre><code class=\"language-bash\">java -Dspring.config.location=./config.properties,&lt;otherConfigFilePath&gt; -jar supernode.jar\n</code></pre>\n</li>\n</ul>\n",
"link": "\\en-us\\docs\\userguide\\supernode_configuration.html",
"__html": "<h1>Fescar SuperNode Configuration</h1>\n<p>The SuperNode is written in Java based on Spring Boot. You can easily set properties with command line parameters or with the configuration file.</p>\n<h2>SuperNode Properties</h2>\n<h3>Simple Property</h3>\n<table>\n<thead>\n<tr>\n<th>Property Name</th>\n<th>Default Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>supernode.baseHome</td>\n<td>/home/admin/supernode</td>\n<td>Working directory of the SuperNode</td>\n</tr>\n<tr>\n<td>supernode.systemNeedRate</td>\n<td>20</td>\n<td>Network rate reserved for the system (Unit: MB/s)</td>\n</tr>\n<tr>\n<td>supernode.totalLimit</td>\n<td>200</td>\n<td>Network rate reserved for the SuperNode (Unit: MB/s)</td>\n</tr>\n<tr>\n<td>supernode.schedulerCorePoolSize</td>\n<td>10</td>\n<td>Core pool size of ScheduledExecutorService</td>\n</tr>\n<tr>\n<td>supernode.dfgetPath</td>\n<td>/usr/local/bin/dfget/</td>\n<td>The <code>dfget</code> path</td>\n</tr>\n</tbody>\n</table>\n<h3>Cluster Property</h3>\n<h4>supernode.cluster</h4>\n<p>This is an array property, and every member of it has these attributes:</p>\n<table>\n<thead>\n<tr>\n<th>Name</th>\n<th>Default Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>ip</td>\n<td>None</td>\n<td>The ip of the cluster member.</td>\n</tr>\n<tr>\n<td>registerPort</td>\n<td>8001</td>\n<td>The register port of the cluster member.</td>\n</tr>\n<tr>\n<td>downloadPort</td>\n<td>8002</td>\n<td>The download port of the cluster member.</td>\n</tr>\n</tbody>\n</table>\n<ul>\n<li>\n<p>Config it in <code>.properties</code> file, for example:</p>\n<pre><code class=\"language-ini\">supernode.cluster[0].ip = '192.168.0.1'\nsupernode.cluster[0].registerPort = 8001\nsupernode.cluster[1].ip = '192.168.0.2'\n</code></pre>\n</li>\n<li>\n<p>Config it in <code>.yaml</code> file, for example:</p>\n<pre><code class=\"language-yaml\"><span class=\"hljs-attr\">supernode:</span>\n<span class=\"hljs-attr\"> cluster:</span>\n<span class=\"hljs-attr\"> - ip:</span> <span class=\"hljs-string\">'192.168.0.1'</span>\n<span class=\"hljs-attr\"> registerPort:</span> <span class=\"hljs-number\">8001</span>\n<span class=\"hljs-attr\"> - ip:</span> <span class=\"hljs-string\">'192.168.0.2'</span>\n</code></pre>\n</li>\n</ul>\n<h2>Setting Properties</h2>\n<p>You have two options when setting properties of a SuperNode.</p>\n<ul>\n<li>\n<p>Setting properties with command line parameters.</p>\n<pre><code class=\"language-bash\">java -D&lt;propertyName&gt;=&lt;propertyValue&gt; -jar supernode.jar\n</code></pre>\n</li>\n<li>\n<p>Setting properties with the configuration file.</p>\n<pre><code class=\"language-bash\">java -Dspring.config.location=./config.properties,&lt;otherConfigFilePath&gt; -jar supernode.jar\n</code></pre>\n</li>\n</ul>\n",
"link": "/en-us/docs/userguide/supernode_configuration.html",
"meta": {}
}

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 317 KiB

View File

@ -1,12 +1,12 @@
{
"en-us": [
{
"filename": "dubbo-seata.md",
"link": "\\en-us\\blog\\dubbo-seata.html",
"filename": "dubbo-fescar.md",
"link": "/en-us/blog/dubbo-fescar.html",
"meta": {
"title": "How to use Seata to ensure consistency between Dubbo Microservices",
"keywords": "Dubbo,Seata,Consistency",
"description": "This article will introduce you how to use Seata to ensure consistency between Dubbo Microservices.",
"title": "How to use Fescar to ensure consistency between Dubbo Microservices",
"keywords": "Dubbo,Fescar,Consistency",
"description": "This article will introduce you how to use Fescar to ensure consistency between Dubbo Microservices.",
"author": "slievrly",
"date": "2019-03-07"
}
@ -14,12 +14,12 @@
],
"zh-cn": [
{
"filename": "dubbo-seata.md",
"link": "\\zh-cn\\blog\\dubbo-seata.html",
"filename": "dubbo-fescar.md",
"link": "/zh-cn/blog/dubbo-fescar.html",
"meta": {
"title": "如何使用Seata保证Dubbo微服务间的一致性",
"keywords": "Dubbo,Seata,一致性",
"description": "本文主要介绍如何使用Seata保证Dubbo微服务间的一致性",
"title": "如何使用Fescar保证Dubbo微服务间的一致性",
"keywords": "Dubbo,Fescar,一致性",
"description": "本文主要介绍如何使用Fescar保证Dubbo微服务间的一致性",
"author": "slievrly",
"date": "2019-03-07"
}

View File

@ -2,172 +2,172 @@
"en-us": [
{
"filename": "api.md",
"link": "\\en-us\\docs\\api.html",
"link": "/en-us/docs/api.html",
"meta": {}
},
{
"filename": "dfdaemon.md",
"link": "\\en-us\\docs\\cli_ref\\dfdaemon.html",
"link": "/en-us/docs/cli_ref/dfdaemon.html",
"meta": {}
},
{
"filename": "dfget.md",
"link": "\\en-us\\docs\\cli_ref\\dfget.html",
"link": "/en-us/docs/cli_ref/dfget.html",
"meta": {}
},
{
"filename": "maintainers.md",
"link": "\\en-us\\docs\\developers\\maintainers.html",
"link": "/en-us/docs/developers/maintainers.html",
"meta": {
"title": "Seata Maintainers",
"keywords": "Seata, Maintainers",
"description": "A list of Seata maintainers"
"title": "Fescar Maintainers",
"keywords": "Fescar, Maintainers",
"description": "A list of Fescar maintainers"
}
},
{
"filename": "faq.md",
"link": "\\en-us\\docs\\faq.html",
"link": "/en-us/docs/faq.html",
"meta": {}
},
{
"filename": "terminology.md",
"link": "\\en-us\\docs\\overview\\terminology.html",
"link": "/en-us/docs/overview/terminology.html",
"meta": {}
},
{
"filename": "what_is_seata.md",
"link": "\\en-us\\docs\\overview\\what_is_seata.html",
"filename": "what_is_fescar.md",
"link": "/en-us/docs/overview/what_is_fescar.html",
"meta": {}
},
{
"filename": "quickstart.md",
"link": "\\en-us\\docs\\quickstart.html",
"link": "/en-us/docs/quickstart.html",
"meta": {}
},
{
"filename": "download_files.md",
"link": "\\en-us\\docs\\userguide\\download_files.html",
"link": "/en-us/docs/userguide/download_files.html",
"meta": {}
},
{
"filename": "install_client.md",
"link": "\\en-us\\docs\\userguide\\install_client.html",
"link": "/en-us/docs/userguide/install_client.html",
"meta": {}
},
{
"filename": "install_server.md",
"link": "\\en-us\\docs\\userguide\\install_server.html",
"link": "/en-us/docs/userguide/install_server.html",
"meta": {}
},
{
"filename": "supernode_configuration.md",
"link": "\\en-us\\docs\\userguide\\supernode_configuration.html",
"link": "/en-us/docs/userguide/supernode_configuration.html",
"meta": {}
}
],
"zh-cn": [
{
"filename": "seatatcc.md",
"link": "\\zh-cn\\docs\\architecture\\seatatcc.html",
"filename": "fescar_at.md",
"link": "/zh-cn/docs/architecture/fescar_at.html",
"meta": {}
},
{
"filename": "seata_at.md",
"link": "\\zh-cn\\docs\\architecture\\seata_at.html",
"filename": "fescar_mertics.md",
"link": "/zh-cn/docs/architecture/fescar_mertics.html",
"meta": {}
},
{
"filename": "seata_mertics.md",
"link": "\\zh-cn\\docs\\architecture\\seata_mertics.html",
"filename": "fescar_tcc.md",
"link": "/zh-cn/docs/architecture/fescar_tcc.html",
"meta": {}
},
{
"filename": "dfdaemon.md",
"link": "\\zh-cn\\docs\\cli_ref\\dfdaemon.html",
"link": "/zh-cn/docs/cli_ref/dfdaemon.html",
"meta": {}
},
{
"filename": "dfget.md",
"link": "\\zh-cn\\docs\\cli_ref\\dfget.html",
"link": "/zh-cn/docs/cli_ref/dfget.html",
"meta": {}
},
{
"filename": "activity.md",
"link": "\\zh-cn\\docs\\community\\activity.html",
"link": "/zh-cn/docs/community/activity.html",
"meta": {}
},
{
"filename": "contact.md",
"link": "\\zh-cn\\docs\\community\\contact.html",
"link": "/zh-cn/docs/community/contact.html",
"meta": {}
},
{
"filename": "contribution.md",
"link": "\\zh-cn\\docs\\community\\contribution.html",
"link": "/zh-cn/docs/community/contribution.html",
"meta": {}
},
{
"filename": "question.md",
"link": "\\zh-cn\\docs\\community\\question.html",
"link": "/zh-cn/docs/community/question.html",
"meta": {}
},
{
"filename": "roadmap.md",
"link": "\\zh-cn\\docs\\community\\roadmap.html",
"link": "/zh-cn/docs/community/roadmap.html",
"meta": {}
},
{
"filename": "maintainers.md",
"link": "\\zh-cn\\docs\\developers\\maintainers.html",
"link": "/zh-cn/docs/developers/maintainers.html",
"meta": {
"title": "Seata 维护者",
"keywords": "Seata, 维护者",
"description": "Seata 维护者名单"
"title": "Fescar 维护者",
"keywords": "Fescar, 维护者",
"description": "Fescar 维护者名单"
}
},
{
"filename": "faq.md",
"link": "\\zh-cn\\docs\\faq.html",
"link": "/zh-cn/docs/faq.html",
"meta": {}
},
{
"filename": "operation.md",
"link": "\\zh-cn\\docs\\ops\\operation.html",
"link": "/zh-cn/docs/ops/operation.html",
"meta": {}
},
{
"filename": "terminology.md",
"link": "\\zh-cn\\docs\\overview\\terminology.html",
"link": "/zh-cn/docs/overview/terminology.html",
"meta": {}
},
{
"filename": "what_is_seata.md",
"link": "\\zh-cn\\docs\\overview\\what_is_seata.html",
"filename": "what_is_fescar.md",
"link": "/zh-cn/docs/overview/what_is_fescar.html",
"meta": {}
},
{
"filename": "api.md",
"link": "\\zh-cn\\docs\\quickstart\\api.html",
"link": "/zh-cn/docs/quickstart/api.html",
"meta": {}
},
{
"filename": "datasource.md",
"link": "\\zh-cn\\docs\\quickstart\\datasource.html",
"link": "/zh-cn/docs/quickstart/datasource.html",
"meta": {}
},
{
"filename": "microservice.md",
"link": "\\zh-cn\\docs\\quickstart\\microservice.html",
"link": "/zh-cn/docs/quickstart/microservice.html",
"meta": {}
},
{
"filename": "ormframework.md",
"link": "\\zh-cn\\docs\\quickstart\\ormframework.html",
"link": "/zh-cn/docs/quickstart/ormframework.html",
"meta": {}
},
{
"filename": "spring.md",
"link": "\\zh-cn\\docs\\quickstart\\spring.html",
"link": "/zh-cn/docs/quickstart/spring.html",
"meta": {}
}
]

4
package-lock.json generated
View File

@ -1717,6 +1717,7 @@
"resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz",
"integrity": "sha1-emNune1O/O+xnO9JR6PGffrukRs=",
"dev": true,
"optional": true,
"requires": {
"hoek": "0.9.x"
}
@ -6364,7 +6365,8 @@
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz",
"integrity": "sha1-PTIkYrrfB3Fup+uFuviAec3c5QU=",
"dev": true
"dev": true,
"optional": true
},
"home-or-tmp": {
"version": "2.0.0",

View File

@ -4,11 +4,11 @@ export default {
postsTitle: 'All posts',
list: [
{
title: 'How to use Seata to ensure consistency between Dubbo Microservices',
title: 'How to use Fescar to ensure consistency between Dubbo Microservices',
author: '@slievrly',
dateStr: 'Jan 17th, 2019',
desc: 'This blog describes details of using Seata to ensure consistency between Dubbo Microservices',
link: '/en-us/blog/dubbo-seata.html',
desc: 'This blog describes details of using Fescar to ensure consistency between Dubbo Microservices',
link: '/en-us/blog/dubbo-fescar.html',
}
]
},
@ -17,11 +17,11 @@ export default {
postsTitle: '所有文章',
list: [
{
title: '如何使用Seata保证Dubbo微服务间的一致性',
title: '如何使用Fescar保证Dubbo微服务间的一致性',
author: '@slievrly',
dateStr: 'Jan 17th, 2019',
desc: '本文详细介绍了如何使用Seata保证Dubbo微服务间的一致性',
link: '/zh-cn/blog/dubbo-seata.html',
desc: '本文详细介绍了如何使用Fescar保证Dubbo微服务间的一致性',
link: '/zh-cn/blog/dubbo-fescar.html',
}
]
},

View File

@ -89,7 +89,7 @@ export default {
},
contributorGuide: {
title: 'Contributor Guide',
desc: 'You can always contribute to Seata.',
desc: 'You can always contribute to Fescar.',
list: [
{
img: '/img/channels/email_gray.svg',
@ -99,7 +99,7 @@ export default {
{
img: '/img/channels/github_gray.svg',
title: 'Issue',
content: <span>Submit a <a href="https://github.com/dragonflyoss/Seata/issues/new">new issue</a>.</span>,
content: <span>Submit a <a href="https://github.com/dragonflyoss/Fescar/issues/new">new issue</a>.</span>,
},
{
img: '/img/documents.png',
@ -109,7 +109,7 @@ export default {
{
img: '/img/pullrequest.png',
title: 'Pull Request',
content: <span>Create a brilliant <a href="https://github.com/dragonflyoss/Seata/pulls">pull request</a>. </span>,
content: <span>Create a brilliant <a href="https://github.com/dragonflyoss/Fescar/pulls">pull request</a>. </span>,
},
],
},
@ -202,7 +202,7 @@ export default {
},
contributorGuide: {
title: '贡献指南',
desc: '欢迎为 Seata 做贡献!',
desc: '欢迎为 Fescar 做贡献!',
list: [
{
img: '/img/channels/email_gray.svg',
@ -212,7 +212,7 @@ export default {
{
img: '/img/channels/github_gray.svg',
title: '报告问题',
content: <span>提交<a href="https://github.com/dragonflyoss/Seata/issues/new">新问题</a></span>,
content: <span>提交<a href="https://github.com/dragonflyoss/Fescar/issues/new">新问题</a></span>,
},
{
img: '/img/documents.png',
@ -222,7 +222,7 @@ export default {
{
img: '/img/pullrequest.png',
title: '提交 PR',
content: <span>创建一个<a href="https://github.com/dragonflyoss/Seata/pulls">PR</a></span>,
content: <span>创建一个<a href="https://github.com/dragonflyoss/Fescar/pulls">PR</a></span>,
},
],
},

View File

@ -2,15 +2,15 @@ export default {
'en-us': {
sidemenu: [
{
title: 'Seata',
title: 'Fescar',
children: [
{
title: 'Overview',
opened: true,
children: [
{
title: 'What is Seata?',
link: '/en-us/docs/overview/what_is_seata.html',
title: 'What is Fescar?',
link: '/en-us/docs/overview/what_is_fescar.html',
},
{
title: 'Terminology',
@ -74,15 +74,15 @@ export default {
'zh-cn': {
sidemenu: [
{
title: 'Seata',
title: 'Fescar',
children: [
{
title: '概述',
opened: true,
children: [
{
title: '什么是 Seata',
link: '/zh-cn/docs/overview/what_is_seata.html',
title: '什么是 Fescar',
link: '/zh-cn/docs/overview/what_is_fescar.html',
},
{
title: '术语表',
@ -95,16 +95,16 @@ export default {
opened: true,
children: [
{
title: 'Seata AT 模式',
link: '/zh-cn/docs/architecture/seata_at.html',
title: 'Fescar AT 模式',
link: '/zh-cn/docs/architecture/fescar_at.html',
},
{
title: 'Seata TCC 模式',
link: '/zh-cn/docs/architecture/seata_tcc.html',
title: 'Fescar TCC 模式',
link: '/zh-cn/docs/architecture/fescar_tcc.html',
},
{
title: 'Metrics设计',
link: '/zh-cn/docs/architecture/seata_mertics.html',
link: '/zh-cn/docs/architecture/fescar_mertics.html',
},
],
},

View File

@ -1,24 +1,24 @@
export default {
'zh-cn': {
brand: {
brandName: 'Seata',
briefIntroduction: 'Seata 是一款阿里巴巴开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。',
brandName: 'Fescar',
briefIntroduction: 'Fescar 是一款阿里巴巴开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。',
buttons: [
{
text: '快速入门',
link: '/zh-cn/docs/overview/what_is_seata.html',
link: '/zh-cn/docs/overview/what_is_fescar.html',
type: 'primary',
},
{
text: 'Github',
link: 'https://github.com/alibaba/seata',
link: 'https://github.com/alibaba/fescar',
type: 'normal',
},
],
},
introduction: {
title: '什么是 Seata',
desc: 'Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。Seata 于2019.1 正式对外开源前身是阿里巴巴2014年诞生的 TXCTaobao Transaction Constructor在集团业务得到了广泛使用。并且于2016年对外发布阿里云 GTSGlobal Transactional Service使得 Seata 在分布式事务领域受到企业和个人用户青睐。',
title: '什么是 Fescar',
desc: 'Fescar 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。Fescar 于2019.1 正式对外开源前身是阿里巴巴2014年诞生的 TXCTaobao Transaction Constructor在集团业务得到了广泛使用。并且于2016年对外发布阿里云 GTSGlobal Transactional Service使得 Fescar 在分布式事务领域受到企业和个人用户青睐。',
img: 'https://img.alicdn.com/tfs/TB1rDpkJAvoK1RjSZPfXXXPKFXa-794-478.png',
},
features: {
@ -59,8 +59,8 @@ export default {
},
'en-us': {
brand: {
brandName: 'Seata',
briefIntroduction: 'Seata is a distributed transaction solution with high performance and ease of use for microservices architecture',
brandName: 'Fescar',
briefIntroduction: 'Fescar is a distributed transaction solution with high performance and ease of use for microservices architecture',
buttons: [
{
text: 'Get Started',
@ -69,14 +69,14 @@ export default {
},
{
text: 'Github',
link: 'https://github.com/alibaba/seata',
link: 'https://github.com/alibaba/fescar',
type: 'normal',
},
],
},
introduction: {
title: 'What is Seata?',
desc: 'Seata is a distributed messaging and streaming computing platform with high performance and high throughput. It is an open source project from Alibaba, which has been donated to the Apache Software Foundation in 2016. On September 25, 2017, it became an Apache top-level project. Its predecessor was MetaQ, a data messaging engine created by Alibaba in 2011. And it was created as an open source project known as Seata 3.0 in 2012. Low latency, high reliability, and scalability make Apache Seata popular among enterprises and individuals in the distributed computing field.',
title: 'What is Fescar?',
desc: 'Fescar is a distributed messaging and streaming computing platform with high performance and high throughput. It is an open source project from Alibaba, which has been donated to the Apache Software Foundation in 2016. On September 25, 2017, it became an Apache top-level project. Its predecessor was MetaQ, a data messaging engine created by Alibaba in 2011. And it was created as an open source project known as Fescar 3.0 in 2012. Low latency, high reliability, and scalability make Apache Fescar popular among enterprises and individuals in the distributed computing field.',
img: 'https://img.alicdn.com/tfs/TB1rDpkJAvoK1RjSZPfXXXPKFXa-794-478.png',
},
features: {
@ -90,27 +90,27 @@ export default {
{
icon: 'feature-2',
title: 'Distributed transaction',
content: 'Seata implements a function similar to distributed transaction processing of X/Open XA, which allows multiple resources to be accessed within the same transaction.',
content: 'Fescar implements a function similar to distributed transaction processing of X/Open XA, which allows multiple resources to be accessed within the same transaction.',
},
{
icon: 'feature-3',
title: 'Cache and Cache Maintenance',
content: 'Seata makes the best use of system memory cache to maintain data to the file system through flushing either synchronously or asynchronously.',
content: 'Fescar makes the best use of system memory cache to maintain data to the file system through flushing either synchronously or asynchronously.',
},
{
icon: 'feature-4',
title: 'Message filtering',
content: 'Apache Seata supports flexible syntax expressions to filter messages, which reduces transmission of useless messages to consumers.',
content: 'Apache Fescar supports flexible syntax expressions to filter messages, which reduces transmission of useless messages to consumers.',
},
{
icon: 'feature-5',
title: 'Consumer offset',
content: 'Based on the message storage model of Apache Seata, consumer offset can be reset by the time, accurate to a millisecond. Messages can be re-consumed from the earliest offset and the latest offset.',
content: 'Based on the message storage model of Apache Fescar, consumer offset can be reset by the time, accurate to a millisecond. Messages can be re-consumed from the earliest offset and the latest offset.',
},
{
icon: 'feature-6',
title: 'Timed messaging',
content: 'Apache Seata supports timed messaging, but the time precision has specific levels. ',
content: 'Apache Fescar supports timed messaging, but the time precision has specific levels. ',
},
]
},

View File

@ -15,7 +15,7 @@ export default {
{
key: 'docs',
text: 'DOCS',
link: '/en-us/docs/overview/what_is_seata.html',
link: '/en-us/docs/overview/what_is_fescar.html',
},
{
key: 'blog',
@ -30,14 +30,14 @@ export default {
],
vision: {
title: 'Vision',
content: 'Seata is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.',
content: 'Fescar is dedicated to improving the efficiency of large-scale file distribution, building the go-to solution and standards of container image distribution, and providing you with file and image distribution service which is efficient, easy-to-use, and of high availability.',
},
documentation: {
title: 'Documentation',
list: [
{
text: 'What is Seata?',
link: '/en-us/docs/overview/what_is_seata.html',
text: 'What is Fescar?',
link: '/en-us/docs/overview/what_is_fescar.html',
},
{
text: 'Quick Start',
@ -58,7 +58,7 @@ export default {
},
],
},
copyright: 'Copyright © 2019 Seata',
copyright: 'Copyright © 2019 Fescar',
},
'zh-cn': {
pageMenu: [
@ -70,7 +70,7 @@ export default {
{
key: 'docs',
text: '文档',
link: '/zh-cn/docs/overview/what_is_seata.html',
link: '/zh-cn/docs/overview/what_is_fescar.html',
},
{
key: 'blog',
@ -85,14 +85,14 @@ export default {
],
vision: {
title: '愿景',
content: 'Seata 是一款阿里巴巴开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。',
content: 'Fescar 是一款阿里巴巴开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。',
},
documentation: {
title: '文档',
list: [
{
text: '什么是 Seata',
link: '/zh-cn/docs/overview/what_is_seata.html',
text: '什么是 Fescar',
link: '/zh-cn/docs/overview/what_is_fescar.html',
},
{
text: '快速开始',
@ -113,6 +113,6 @@ export default {
},
],
},
copyright: 'Copyright © 2019 Seata',
copyright: 'Copyright © 2019 Fescar',
},
};

View File

@ -34,7 +34,7 @@ class Home extends Language {
});
}
});
fetch('//api.github.com/repos/alibaba/seata')
fetch('//api.github.com/repos/alibaba/fescar')
.then(res => res.json())
.then((data) => {
this.setState({
@ -72,7 +72,7 @@ class Home extends Language {
}
</div>
<div className="github-buttons">
<a href="https://github.com/alibaba/seata" target="_blank" rel="noopener noreferrer">
<a href="https://github.com/alibaba/fescar" target="_blank" rel="noopener noreferrer">
<div className="star">
<img src="https://img.alicdn.com/tfs/TB1FlB1JwHqK1RjSZFPXXcwapXa-32-32.png" />
<span className="type">Star</span>
@ -80,7 +80,7 @@ class Home extends Language {
<span className="count">{starCount}</span>
</div>
</a>
<a href="https://github.com/alibaba/seata/fork" target="_blank" rel="noopener noreferrer">
<a href="https://github.com/alibaba/fescar/fork" target="_blank" rel="noopener noreferrer">
<div className="fork">
<img src="https://img.alicdn.com/tfs/TB1zbxSJwDqK1RjSZSyXXaxEVXa-32-32.png" />
<span className="type">Fork</span>

View File

@ -12,9 +12,9 @@
<link rel="stylesheet" href="/build/blogDetail.css" />
</head>
<body>
<div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/zh-cn/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1iqPwCkPoK1RjSZKbXXX1IXXa-292-72.png"/></a><span class="language-switch language-switch-normal">En</span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/zh-cn/index.html" target="_self">首页</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/docs/overview/what_is_seata.html" target="_self">文档</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/blog/client.html" target="_self">客户端</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/zh-cn/blog/index.html" target="_self">博客</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/community/index.html" target="_self">社区</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/blog/download.html" target="_self">下载</a></li></ul></div></div></header><section class="blog-content markdown-body"><h2>客户端页面</h2>
<div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/zh-cn/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1iqPwCkPoK1RjSZKbXXX1IXXa-292-72.png"/></a><span class="language-switch language-switch-normal">En</span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/zh-cn/index.html" target="_self">首页</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">文档</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/blog/client.html" target="_self">客户端</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/zh-cn/blog/index.html" target="_self">博客</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/community/index.html" target="_self">社区</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/blog/download.html" target="_self">下载</a></li></ul></div></div></header><section class="blog-content markdown-body"><h2>客户端页面</h2>
<p>内容</p>
</section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1JOLlCgDqK1RjSZSyXXaxEVXa-292-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>愿景</h3><p>Seata 致力于解决大规模文件分发的效率问题,打造容器镜像分发的第一解决方案和标准规范,并为用户提供高可用、高效率以及简单易用的文件及镜像分发服务。</p></div><div class="col col-6"><dl><dt>文档</dt><dd><a href="/zh-cn/docs/overview/what_is_seata.html" target="_self">什么是 Seata</a></dd><dd><a href="/zh-cn/docs/quickstart.html" target="_self">快速开始</a></dd></dl></div><div class="col col-6"><dl><dt>资源</dt><dd><a href="/zh-cn/blog/index.html" target="_self">博客</a></dd><dd><a href="/zh-cn/community/index.html" target="_self">社区</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Seata</span></div></div></footer></div></div>
</section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1JOLlCgDqK1RjSZSyXXaxEVXa-292-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>愿景</h3><p>Fescar 致力于解决大规模文件分发的效率问题,打造容器镜像分发的第一解决方案和标准规范,并为用户提供高可用、高效率以及简单易用的文件及镜像分发服务。</p></div><div class="col col-6"><dl><dt>文档</dt><dd><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">什么是 Fescar</a></dd><dd><a href="/zh-cn/docs/quickstart.html" target="_self">快速开始</a></dd></dl></div><div class="col col-6"><dl><dt>资源</dt><dd><a href="/zh-cn/blog/index.html" target="_self">博客</a></dd><dd><a href="/zh-cn/community/index.html" target="_self">社区</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Fescar</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>

View File

@ -12,9 +12,9 @@
<link rel="stylesheet" href="/build/blogDetail.css" />
</head>
<body>
<div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/zh-cn/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1iqPwCkPoK1RjSZKbXXX1IXXa-292-72.png"/></a><span class="language-switch language-switch-normal">En</span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/zh-cn/index.html" target="_self">首页</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/docs/overview/what_is_seata.html" target="_self">文档</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/blog/client.html" target="_self">客户端</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/zh-cn/blog/index.html" target="_self">博客</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/community/index.html" target="_self">社区</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/blog/download.html" target="_self">下载</a></li></ul></div></div></header><section class="blog-content markdown-body"><h2>下载页面</h2>
<div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/zh-cn/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1iqPwCkPoK1RjSZKbXXX1IXXa-292-72.png"/></a><span class="language-switch language-switch-normal">En</span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/zh-cn/index.html" target="_self">首页</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">文档</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/blog/client.html" target="_self">客户端</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/zh-cn/blog/index.html" target="_self">博客</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/community/index.html" target="_self">社区</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/blog/download.html" target="_self">下载</a></li></ul></div></div></header><section class="blog-content markdown-body"><h2>下载页面</h2>
<p>内容</p>
</section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1JOLlCgDqK1RjSZSyXXaxEVXa-292-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>愿景</h3><p>Seata 致力于解决大规模文件分发的效率问题,打造容器镜像分发的第一解决方案和标准规范,并为用户提供高可用、高效率以及简单易用的文件及镜像分发服务。</p></div><div class="col col-6"><dl><dt>文档</dt><dd><a href="/zh-cn/docs/overview/what_is_seata.html" target="_self">什么是 Seata</a></dd><dd><a href="/zh-cn/docs/quickstart.html" target="_self">快速开始</a></dd></dl></div><div class="col col-6"><dl><dt>资源</dt><dd><a href="/zh-cn/blog/index.html" target="_self">博客</a></dd><dd><a href="/zh-cn/community/index.html" target="_self">社区</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Seata</span></div></div></footer></div></div>
</section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1JOLlCgDqK1RjSZSyXXaxEVXa-292-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>愿景</h3><p>Fescar 致力于解决大规模文件分发的效率问题,打造容器镜像分发的第一解决方案和标准规范,并为用户提供高可用、高效率以及简单易用的文件及镜像分发服务。</p></div><div class="col col-6"><dl><dt>文档</dt><dd><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">什么是 Fescar</a></dd><dd><a href="/zh-cn/docs/quickstart.html" target="_self">快速开始</a></dd></dl></div><div class="col col-6"><dl><dt>资源</dt><dd><a href="/zh-cn/blog/index.html" target="_self">博客</a></dd><dd><a href="/zh-cn/community/index.html" target="_self">社区</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Fescar</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>

View File

@ -0,0 +1,205 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<meta name="keywords" content="Dubbo,Fescar,一致性" />
<meta name="description" content="本文主要介绍如何使用Fescar保证Dubbo微服务间的一致性" />
<!-- 网页标签标题 -->
<title>如何使用Fescar保证Dubbo微服务间的一致性</title>
<link rel="shortcut icon" href="https://img.alicdn.com/tfs/TB1O1p6JzTpK1RjSZKPXXa3UpXa-64-64.png"/>
<link rel="stylesheet" href="/build/blogDetail.css" />
</head>
<body>
<div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/zh-cn/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal">En</span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/zh-cn/index.html" target="_self">首页</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">文档</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/zh-cn/blog/index.html" target="_self">博客</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/community/index.html" target="_self">社区</a></li></ul></div></div></header><section class="blog-content markdown-body"><h1>如何使用Fescar保证Dubbo微服务间的一致性</h1>
<h2>案例</h2>
<p>用户采购商品业务整个业务包含3个微服务:</p>
<ul>
<li>库存服务: 扣减给定商品的库存数量。</li>
<li>订单服务: 根据采购请求生成订单。</li>
<li>账户服务: 用户账户金额扣减。</li>
</ul>
<h3>业务结构图</h3>
<p><img src="../../img/blog/fescar/fescar-1.png" alt="Architecture"></p>
<h3>StorageService</h3>
<pre><code class="language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">StorageService</span> </span>{
<span class="hljs-comment">/**
* deduct storage count
*/</span>
<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">deduct</span><span class="hljs-params">(String commodityCode, <span class="hljs-keyword">int</span> count)</span></span>;
}
</code></pre>
<h3>OrderService</h3>
<pre><code class="language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">OrderService</span> </span>{
<span class="hljs-comment">/**
* create order
*/</span>
<span class="hljs-function">Order <span class="hljs-title">create</span><span class="hljs-params">(String userId, String commodityCode, <span class="hljs-keyword">int</span> orderCount)</span></span>;
}
</code></pre>
<h3>AccountService</h3>
<pre><code class="language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">AccountService</span> </span>{
<span class="hljs-comment">/**
* debit balance of user's account
*/</span>
<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">debit</span><span class="hljs-params">(String userId, <span class="hljs-keyword">int</span> money)</span></span>;
}
</code></pre>
<h3>主要的业务逻辑:</h3>
<pre><code class="language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">BusinessServiceImpl</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">BusinessService</span> </span>{
<span class="hljs-keyword">private</span> StorageService storageService;
<span class="hljs-keyword">private</span> OrderService orderService;
<span class="hljs-comment">/**
* purchase
*/</span>
<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">purchase</span><span class="hljs-params">(String userId, String commodityCode, <span class="hljs-keyword">int</span> orderCount)</span> </span>{
storageService.deduct(commodityCode, orderCount);
orderService.create(userId, commodityCode, orderCount);
}
}
</code></pre>
<pre><code class="language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">StorageServiceImpl</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">StorageService</span> </span>{
<span class="hljs-keyword">private</span> StorageDAO storageDAO;
<span class="hljs-meta">@Override</span>
<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">deduct</span><span class="hljs-params">(String commodityCode, <span class="hljs-keyword">int</span> count)</span> </span>{
Storage storage = <span class="hljs-keyword">new</span> Storage();
storage.setCount(count);
storage.setCommodityCode(commodityCode);
storageDAO.update(storage);
}
}
</code></pre>
<pre><code class="language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">OrderServiceImpl</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">OrderService</span> </span>{
<span class="hljs-keyword">private</span> OrderDAO orderDAO;
<span class="hljs-keyword">private</span> AccountService accountService;
<span class="hljs-function"><span class="hljs-keyword">public</span> Order <span class="hljs-title">create</span><span class="hljs-params">(String userId, String commodityCode, <span class="hljs-keyword">int</span> orderCount)</span> </span>{
<span class="hljs-keyword">int</span> orderMoney = calculate(commodityCode, orderCount);
accountService.debit(userId, orderMoney);
Order order = <span class="hljs-keyword">new</span> Order();
order.userId = userId;
order.commodityCode = commodityCode;
order.count = orderCount;
order.money = orderMoney;
<span class="hljs-keyword">return</span> orderDAO.insert(order);
}
}
</code></pre>
<h2>Fescar 分布式事务解决方案</h2>
<p><img src="../../img/blog/fescar/fescar-2.png" alt="undefined"></p>
<p>此处仅仅需要一行注解 <code>@GlobalTransactional</code> 写在业务发起方的方法上:</p>
<pre><code class="language-java">
<span class="hljs-meta">@GlobalTransactional</span>
<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">purchase</span><span class="hljs-params">(String userId, String commodityCode, <span class="hljs-keyword">int</span> orderCount)</span> </span>{
......
}
</code></pre>
<h2>Dubbo 与 Fescar 结合的例子</h2>
<h3>Step 1: 安装数据库</h3>
<ul>
<li>要求: MySQL (InnoDB 存储引擎)。</li>
</ul>
<p><strong>提示:</strong> 事实上例子中3个微服务需要3个独立的数据库但为了方便我们使用同一物理库并配置3个逻辑连接串。</p>
<p>更改以下xml文件中的数据库url、username和password</p>
<p>dubbo-account-service.xml
dubbo-order-service.xml
dubbo-storage-service.xml</p>
<pre><code class="language-xml"> <span class="hljs-tag">&lt;<span class="hljs-name">property</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"url"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"jdbc:mysql://x.x.x.x:3306/xxx"</span> /&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">property</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"username"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"xxx"</span> /&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">property</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"password"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"xxx"</span> /&gt;</span>
</code></pre>
<h3>Step 2: 为 Fescar 创建 UNDO_LOG 表</h3>
<p><code>UNDO_LOG</code> 此表用于 Fescar 的AT模式。</p>
<pre><code class="language-sql"><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> <span class="hljs-string">`undo_log`</span> (
<span class="hljs-string">`id`</span> <span class="hljs-built_in">bigint</span>(<span class="hljs-number">20</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> AUTO_INCREMENT,
<span class="hljs-string">`branch_id`</span> <span class="hljs-built_in">bigint</span>(<span class="hljs-number">20</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>,
<span class="hljs-string">`xid`</span> <span class="hljs-built_in">varchar</span>(<span class="hljs-number">100</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>,
<span class="hljs-string">`rollback_info`</span> longblob <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>,
<span class="hljs-string">`log_status`</span> <span class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>,
<span class="hljs-string">`log_created`</span> datetime <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>,
<span class="hljs-string">`log_modified`</span> datetime <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>,
<span class="hljs-string">`ext`</span> <span class="hljs-built_in">varchar</span>(<span class="hljs-number">100</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>,
PRIMARY <span class="hljs-keyword">KEY</span> (<span class="hljs-string">`id`</span>),
<span class="hljs-keyword">KEY</span> <span class="hljs-string">`idx_unionkey`</span> (<span class="hljs-string">`xid`</span>,<span class="hljs-string">`branch_id`</span>)
) <span class="hljs-keyword">ENGINE</span>=<span class="hljs-keyword">InnoDB</span> AUTO_INCREMENT=<span class="hljs-number">159</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">CHARSET</span>=utf8
</code></pre>
<h3>Step 3: 创建相关业务表</h3>
<pre><code class="language-sql">
<span class="hljs-keyword">DROP</span> <span class="hljs-keyword">TABLE</span> <span class="hljs-keyword">IF</span> <span class="hljs-keyword">EXISTS</span> <span class="hljs-string">`storage_tbl`</span>;
<span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> <span class="hljs-string">`storage_tbl`</span> (
<span class="hljs-string">`id`</span> <span class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> AUTO_INCREMENT,
<span class="hljs-string">`commodity_code`</span> <span class="hljs-built_in">varchar</span>(<span class="hljs-number">255</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>,
<span class="hljs-string">`count`</span> <span class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-number">0</span>,
PRIMARY <span class="hljs-keyword">KEY</span> (<span class="hljs-string">`id`</span>),
<span class="hljs-keyword">UNIQUE</span> <span class="hljs-keyword">KEY</span> (<span class="hljs-string">`commodity_code`</span>)
) <span class="hljs-keyword">ENGINE</span>=<span class="hljs-keyword">InnoDB</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">CHARSET</span>=utf8;
<span class="hljs-keyword">DROP</span> <span class="hljs-keyword">TABLE</span> <span class="hljs-keyword">IF</span> <span class="hljs-keyword">EXISTS</span> <span class="hljs-string">`order_tbl`</span>;
<span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> <span class="hljs-string">`order_tbl`</span> (
<span class="hljs-string">`id`</span> <span class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> AUTO_INCREMENT,
<span class="hljs-string">`user_id`</span> <span class="hljs-built_in">varchar</span>(<span class="hljs-number">255</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>,
<span class="hljs-string">`commodity_code`</span> <span class="hljs-built_in">varchar</span>(<span class="hljs-number">255</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>,
<span class="hljs-string">`count`</span> <span class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-number">0</span>,
<span class="hljs-string">`money`</span> <span class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-number">0</span>,
PRIMARY <span class="hljs-keyword">KEY</span> (<span class="hljs-string">`id`</span>)
) <span class="hljs-keyword">ENGINE</span>=<span class="hljs-keyword">InnoDB</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">CHARSET</span>=utf8;
<span class="hljs-keyword">DROP</span> <span class="hljs-keyword">TABLE</span> <span class="hljs-keyword">IF</span> <span class="hljs-keyword">EXISTS</span> <span class="hljs-string">`account_tbl`</span>;
<span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> <span class="hljs-string">`account_tbl`</span> (
<span class="hljs-string">`id`</span> <span class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> AUTO_INCREMENT,
<span class="hljs-string">`user_id`</span> <span class="hljs-built_in">varchar</span>(<span class="hljs-number">255</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span>,
<span class="hljs-string">`money`</span> <span class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span class="hljs-keyword">DEFAULT</span> <span class="hljs-number">0</span>,
PRIMARY <span class="hljs-keyword">KEY</span> (<span class="hljs-string">`id`</span>)
) <span class="hljs-keyword">ENGINE</span>=<span class="hljs-keyword">InnoDB</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">CHARSET</span>=utf8;
</code></pre>
<h3>Step 4: 启动 Fescar-Server 服务</h3>
<ul>
<li>下载Server <a href="https://github.com/alibaba/fescar/releases">package</a>, 并解压。</li>
<li>运行bin目录下的启动脚本。</li>
</ul>
<pre><code class="language-shell">sh fescar-server.sh $LISTEN_PORT $PATH_FOR_PERSISTENT_DATA
e.g.
sh fescar-server.sh 8091 /home/admin/fescar/data/
</code></pre>
<h3>Step 5: 运行例子</h3>
<ul>
<li>启动账户服务 (<a href="https://github.com/fescar-group/fescar-samples/blob/master/dubbo/src/main/java/com/alibaba/fescar/samples/dubbo/starter/DubboAccountServiceStarter.java">DubboAccountServiceStarter</a>)。</li>
<li>启动库存服务 (<a href="https://github.com/fescar-group/fescar-samples/blob/master/dubbo/src/main/java/com/alibaba/fescar/samples/dubbo/starter/DubboStorageServiceStarter.java">DubboStorageServiceStarter</a>)。</li>
<li>启动订单服务 (<a href="https://github.com/fescar-group/fescar-samples/blob/master/dubbo/src/main/java/com/alibaba/fescar/samples/dubbo/starter/DubboOrderServiceStarter.java">DubboOrderServiceStarter</a>)。</li>
<li>运行BusinessService入口 (<a href="https://github.com/fescar-group/fescar-samples/blob/master/dubbo/src/main/java/com/alibaba/fescar/samples/dubbo/starter/DubboBusinessTester.java">DubboBusinessTester</a>)。</li>
</ul>
<h3>相关项目</h3>
<ul>
<li>fescar: <a href="https://github.com/alibaba/fescar/">https://github.com/alibaba/fescar/</a></li>
<li>fescar-samples : <a href="https://github.com/fescar-group/fescar-samples">https://github.com/fescar-group/fescar-samples</a></li>
</ul>
</section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>愿景</h3><p>Fescar 是一款阿里巴巴开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。</p></div><div class="col col-6"><dl><dt>文档</dt><dd><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">什么是 Fescar</a></dd><dd><a href="/zh-cn/docs/quickstart.html" target="_self">快速开始</a></dd></dl></div><div class="col col-6"><dl><dt>资源</dt><dd><a href="/zh-cn/blog/index.html" target="_self">博客</a></dd><dd><a href="/zh-cn/community/index.html" target="_self">社区</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Fescar</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>
window.rootPath = '';
</script>
<script src="/build/blogDetail.js"></script>
</body>
</html>

File diff suppressed because one or more lines are too long

View File

@ -12,9 +12,9 @@
<link rel="stylesheet" href="/build/blogDetail.css" />
</head>
<body>
<div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/zh-cn/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal">En</span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/zh-cn/index.html" target="_self">首页</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/docs/overview/what_is_seata.html" target="_self">文档</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/zh-cn/blog/index.html" target="_self">博客</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/community/index.html" target="_self">社区</a></li></ul></div></div></header><section class="blog-content markdown-body"><h1>博客1</h1>
<div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/zh-cn/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal">En</span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/zh-cn/index.html" target="_self">首页</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">文档</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/zh-cn/blog/index.html" target="_self">博客</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/community/index.html" target="_self">社区</a></li></ul></div></div></header><section class="blog-content markdown-body"><h1>博客1</h1>
<p>支持元数据的解析,<code>---</code>(至少三个<code>-</code>)开头之间的数据按照<code>key:value</code>的形式,最终会被解析到<code>md_json/blog.json</code>中,其中<code>filename</code><code>__html</code>为保留字段,请勿使用。</p>
</section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>愿景</h3><p>Seata 是一款阿里巴巴开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。</p></div><div class="col col-6"><dl><dt>文档</dt><dd><a href="/zh-cn/docs/overview/what_is_seata.html" target="_self">什么是 Seata</a></dd><dd><a href="/zh-cn/docs/quickstart.html" target="_self">快速开始</a></dd></dl></div><div class="col col-6"><dl><dt>资源</dt><dd><a href="/zh-cn/blog/index.html" target="_self">博客</a></dd><dd><a href="/zh-cn/community/index.html" target="_self">社区</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Seata</span></div></div></footer></div></div>
</section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>愿景</h3><p>Fescar 是一款阿里巴巴开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。</p></div><div class="col col-6"><dl><dt>文档</dt><dd><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">什么是 Fescar</a></dd><dd><a href="/zh-cn/docs/quickstart.html" target="_self">快速开始</a></dd></dl></div><div class="col col-6"><dl><dt>资源</dt><dd><a href="/zh-cn/blog/index.html" target="_self">博客</a></dd><dd><a href="/zh-cn/community/index.html" target="_self">社区</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Fescar</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>

View File

@ -12,7 +12,7 @@
<link rel="stylesheet" href="/build/blog.css" />
</head>
<body>
<div id="root"><div class="blog-list-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/zh-cn/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal">En</span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/zh-cn/index.html" target="_self">首页</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/docs/overview/what_is_seata.html" target="_self">文档</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/zh-cn/blog/index.html" target="_self">博客</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/community/index.html" target="_self">社区</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1gQ8uJyrpK1RjSZFhXXXSdXXa-160-160.png" class="front-img"/><span>博客</span><img src="https://img.alicdn.com/tfs/TB1gQ8uJyrpK1RjSZFhXXXSdXXa-160-160.png" class="back-img"/></div></div><section class="blog-container"><div class="col col-18 left-part"><div class="page-slider"><div class="slider-list" style="transform:translateX(-0px);transition:transform 500ms ease;width:0"><div class="slider-page" style="width:0"><div class="slider-item"><a href="\zh-cn\blog\dubbo-seata.html" target="_self" class="blog-item"><div class="title"><img src="https://img.alicdn.com/tfs/TB1OkBRukzoK1RjSZFlXXai4VXa-32-40.png"/><span>如何使用Seata保证Dubbo微服务间的一致性</span></div><div class="brief-info"><span class="author">slievrly</span><span class="date">2019-03-07</span></div><p>本文主要介绍如何使用Seata保证Dubbo微服务间的一致性</p></a></div></div></div><div class="slider-control"><img class="slider-control-prev slider-control-prev-hidden" src="/img/system/prev.png"/><img class="slider-control-next slider-control-next-hidden" src="/img/system/next.png"/></div></div></div><div class="col col-6 right-part"><h4>所有文章</h4><ul><li><a href="\zh-cn\blog\dubbo-seata.html" target="_self"><span>2019-03-07<!-- -->  </span><span>如何使用Seata保证Dubbo微服务间的一致性</span></a></li></ul></div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>愿景</h3><p>Seata 是一款阿里巴巴开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。</p></div><div class="col col-6"><dl><dt>文档</dt><dd><a href="/zh-cn/docs/overview/what_is_seata.html" target="_self">什么是 Seata</a></dd><dd><a href="/zh-cn/docs/quickstart.html" target="_self">快速开始</a></dd></dl></div><div class="col col-6"><dl><dt>资源</dt><dd><a href="/zh-cn/blog/index.html" target="_self">博客</a></dd><dd><a href="/zh-cn/community/index.html" target="_self">社区</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Seata</span></div></div></footer></div></div>
<div id="root"><div class="blog-list-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/zh-cn/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal">En</span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/zh-cn/index.html" target="_self">首页</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">文档</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/zh-cn/blog/index.html" target="_self">博客</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/community/index.html" target="_self">社区</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1gQ8uJyrpK1RjSZFhXXXSdXXa-160-160.png" class="front-img"/><span>博客</span><img src="https://img.alicdn.com/tfs/TB1gQ8uJyrpK1RjSZFhXXXSdXXa-160-160.png" class="back-img"/></div></div><section class="blog-container"><div class="col col-18 left-part"><div class="page-slider"><div class="slider-list" style="transform:translateX(-0px);transition:transform 500ms ease;width:0"><div class="slider-page" style="width:0"><div class="slider-item"><a href="/zh-cn/blog/dubbo-fescar.html" target="_self" class="blog-item"><div class="title"><img src="https://img.alicdn.com/tfs/TB1OkBRukzoK1RjSZFlXXai4VXa-32-40.png"/><span>如何使用Fescar保证Dubbo微服务间的一致性</span></div><div class="brief-info"><span class="author">slievrly</span><span class="date">2019-03-07</span></div><p>本文主要介绍如何使用Fescar保证Dubbo微服务间的一致性</p></a></div></div></div><div class="slider-control"><img class="slider-control-prev slider-control-prev-hidden" src="/img/system/prev.png"/><img class="slider-control-next slider-control-next-hidden" src="/img/system/next.png"/></div></div></div><div class="col col-6 right-part"><h4>所有文章</h4><ul><li><a href="/zh-cn/blog/dubbo-fescar.html" target="_self"><span>2019-03-07<!-- -->  </span><span>如何使用Fescar保证Dubbo微服务间的一致性</span></a></li></ul></div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>愿景</h3><p>Fescar 是一款阿里巴巴开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。</p></div><div class="col col-6"><dl><dt>文档</dt><dd><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">什么是 Fescar</a></dd><dd><a href="/zh-cn/docs/quickstart.html" target="_self">快速开始</a></dd></dl></div><div class="col col-6"><dl><dt>资源</dt><dd><a href="/zh-cn/blog/index.html" target="_self">博客</a></dd><dd><a href="/zh-cn/community/index.html" target="_self">社区</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Fescar</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>

File diff suppressed because one or more lines are too long

View File

@ -12,8 +12,8 @@
<link rel="stylesheet" href="/build/documentation.css" />
</head>
<body>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/zh-cn/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal">En</span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/zh-cn/index.html" target="_self">首页</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/zh-cn/docs/overview/what_is_seata.html" target="_self">文档</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/blog/index.html" target="_self">博客</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/community/index.html" target="_self">社区</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>文档</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Seata</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>概述<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/what_is_seata.html" target="_self">什么是 Seata</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/terminology.html" target="_self">术语表</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/quickstart.html" target="_self">快速开始</a></li><li style="height:216px;overflow:hidden" class="menu-item menu-item-level-2"><span>使用指南<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/userguide/install_server.html" target="_self">Spring 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/userguide/install_server.html" target="_self">API 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/userguide/install_client.html" target="_self">微服务框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/userguide/download_files.html" target="_self">ORM 框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/userguide/supernode_configuration.html" target="_self">数据源类型支持</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/api.html" target="_self">社区指南</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/faq.html" target="_self">常见问题</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>1. 概述</h1>
<p>Seata API 分为两大类High-Level API 和 Low-Level API </p>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/zh-cn/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal">En</span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/zh-cn/index.html" target="_self">首页</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">文档</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/blog/index.html" target="_self">博客</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/community/index.html" target="_self">社区</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>文档</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Fescar</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>概述<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">什么是 Fescar</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/terminology.html" target="_self">术语表</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/quickstart.html" target="_self">快速开始</a></li><li style="height:216px;overflow:hidden" class="menu-item menu-item-level-2"><span>使用指南<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/userguide/install_server.html" target="_self">Spring 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/userguide/install_server.html" target="_self">API 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/userguide/install_client.html" target="_self">微服务框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/userguide/download_files.html" target="_self">ORM 框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/userguide/supernode_configuration.html" target="_self">数据源类型支持</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/api.html" target="_self">社区指南</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/faq.html" target="_self">常见问题</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>1. 概述</h1>
<p>Fescar API 分为两大类High-Level API 和 Low-Level API </p>
<ul>
<li><strong>High-Level API</strong> :用于事务边界定义、控制及事务状态查询。</li>
<li><strong>Low-Level API</strong> :用于控制事务上下文的传播。</li>
@ -227,7 +227,7 @@
<p>待相关业务逻辑执行完成,再把 XID 绑定回去,即可实现全局事务的恢复:</p>
<pre><code class="language-java">RootContext.bind(unbindXid);
</code></pre>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>愿景</h3><p>Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。</p></div><div class="col col-6"><dl><dt>文档</dt><dd><a href="/zh-cn/docs/overview/what_is_seata.html" target="_self">什么是 Seata</a></dd><dd><a href="/zh-cn/docs/quickstart.html" target="_self">快速开始</a></dd></dl></div><div class="col col-6"><dl><dt>资源</dt><dd><a href="/zh-cn/blog/index.html" target="_self">博客</a></dd><dd><a href="/zh-cn/community/index.html" target="_self">社区</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Seata</span></div></div></footer></div></div>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>愿景</h3><p>Fescar 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。</p></div><div class="col col-6"><dl><dt>文档</dt><dd><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">什么是 Fescar</a></dd><dd><a href="/zh-cn/docs/quickstart.html" target="_self">快速开始</a></dd></dl></div><div class="col col-6"><dl><dt>资源</dt><dd><a href="/zh-cn/blog/index.html" target="_self">博客</a></dd><dd><a href="/zh-cn/community/index.html" target="_self">社区</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Fescar</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,269 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<meta name="keywords" content="fescar_at" />
<meta name="description" content="fescar_at" />
<!-- 网页标签标题 -->
<title>fescar_at</title>
<link rel="shortcut icon" href="https://img.alicdn.com/tfs/TB1O1p6JzTpK1RjSZKPXXa3UpXa-64-64.png"/>
<link rel="stylesheet" href="/build/documentation.css" />
</head>
<body>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/zh-cn/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal">En</span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/zh-cn/index.html" target="_self">首页</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">文档</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/blog/index.html" target="_self">博客</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/community/index.html" target="_self">社区</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>文档</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Fescar</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>概述<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">什么是 Fescar</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/terminology.html" target="_self">术语表</a></li></ul></li><li style="height:144px;overflow:hidden" class="menu-item menu-item-level-2"><span>设计原理<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/fescar_at.html" target="_self">Fescar AT 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/fescar_tcc.html" target="_self">Fescar TCC 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/fescar_mertics.html" target="_self">Metrics设计</a></li></ul></li><li style="height:216px;overflow:hidden" class="menu-item menu-item-level-2"><span>开发指南<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/spring.html" target="_self">Spring 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/api.html" target="_self">API 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/microservice.html" target="_self">微服务框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/ormframework.html" target="_self">ORM 框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/datasource.html" target="_self">数据源类型支持</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/ops/operation.html" target="_self">运维指南</a></li><li style="height:216px;overflow:hidden" class="menu-item menu-item-level-2"><span>开源共建<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/contribution.html" target="_self">社区贡献</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/activity.html" target="_self">有奖活动</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/question.html" target="_self">提交问题</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/roadmap.html" target="_self">社区规划</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/contact.html" target="_self">联系我们</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/faq.html" target="_self">常见问题</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>Fescar AT 模式</h1>
<h2>前提</h2>
<ul>
<li>基于支持本地 ACID 事务的关系型数据库。</li>
<li>Java 应用,通过 JDBC 访问数据库。</li>
</ul>
<h2>整体机制</h2>
<p>两阶段提交协议的演变:</p>
<ul>
<li>
<p>一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。</p>
</li>
<li>
<p>二阶段:</p>
<ul>
<li>提交异步化,非常快速地完成。</li>
<li>回滚通过一阶段的回滚日志进行反向补偿。</li>
</ul>
</li>
</ul>
<h1>写隔离</h1>
<ul>
<li>一阶段本地事务提交前,需要确保先拿到 <strong>全局锁</strong></li>
<li>拿不到 <strong>全局锁</strong> ,不能提交本地事务。</li>
<li><strong>全局锁</strong> 的尝试被限制在一定范围内,超出范围将放弃,并回滚本地事务,释放本地锁。</li>
</ul>
<p>以一个示例来说明:</p>
<p>两个全局事务 tx1 和 tx2分别对 a 表的 m 字段进行更新操作m 的初始值 1000。</p>
<p>tx1 先开始,开启本地事务,拿到本地锁,更新操作 m = 1000 - 100 = 900。本地事务提交前先拿到该记录的 <strong>全局锁</strong> ,本地提交释放本地锁。
tx2 后开始,开启本地事务,拿到本地锁,更新操作 m = 900 - 100 = 800。本地事务提交前尝试拿该记录的 <strong>全局锁</strong> tx1 全局提交前,该记录的全局锁被 tx1 持有tx2 需要重试等待 <strong>全局锁</strong></p>
<p><img src="https://upload-images.jianshu.io/upload_images/4420767-90b8bf0388953ee8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="Write-Isolation: Commit"></p>
<p>tx1 二阶段全局提交,释放 <strong>全局锁</strong> 。tx2 拿到 <strong>全局锁</strong> 提交本地事务。</p>
<p><img src="https://upload-images.jianshu.io/upload_images/4420767-434090412a6a07b8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="Write-Isolation: Rollback"></p>
<p>如果 tx1 的二阶段全局回滚,则 tx1 需要重新获取该数据的本地锁,进行反向补偿的更新操作,实现分支的回滚。</p>
<p>此时,如果 tx2 仍在等待该数据的 <strong>全局锁</strong>,同时持有本地锁,则 tx1 的分支回滚会失败。分支的回滚会一直重试,直到 tx2 的 <strong>全局锁</strong> 等锁超时,放弃 <strong>全局锁</strong> 并回滚本地事务释放本地锁tx1 的分支回滚最终成功。</p>
<p>因为整个过程 <strong>全局锁</strong> 在 tx1 结束前一直是被 tx1 持有的,所以不会发生 <strong>脏写</strong> 的问题。</p>
<h1>读隔离</h1>
<p>在数据库本地事务隔离级别 <strong>读已提交Read Committed</strong> 或以上的基础上FescarAT 模式)的默认全局隔离级别是 <strong>读未提交Read Uncommitted</strong></p>
<p>如果应用在特定场景下,必需要求全局的 <strong>读已提交</strong> ,目前 Fescar 的方式是通过 SELECT FOR UPDATE 语句的代理。</p>
<p><img src="https://upload-images.jianshu.io/upload_images/4420767-6236f075d02c5e34.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="Read Isolation: SELECT FOR UPDATE"></p>
<p>SELECT FOR UPDATE 语句的执行会申请 <strong>全局锁</strong> ,如果 <strong>全局锁</strong> 被其他事务持有,则释放本地锁(回滚 SELECT FOR UPDATE 语句的本地执行)并重试。这个过程中,查询是被 block 住的,直到 <strong>全局锁</strong> 拿到,即读取的相关数据是 <strong>已提交</strong> 的,才返回。</p>
<p>出于总体性能上的考虑Fescar 目前的方案并没有对所有 SELECT 语句都进行代理,仅针对 FOR UPDATE 的 SELECT 语句。</p>
<h1>工作机制</h1>
<p>以一个示例来说明整个 AT 分支的工作过程。</p>
<p>业务表:<code>product</code></p>
<table>
<thead>
<tr>
<th>Field</th>
<th>Type</th>
<th>Key</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>bigint(20)</td>
<td>PRI</td>
</tr>
<tr>
<td>name</td>
<td>varchar(100)</td>
<td></td>
</tr>
<tr>
<td>since</td>
<td>varchar(100)</td>
<td></td>
</tr>
</tbody>
</table>
<p>AT 分支事务的业务逻辑:</p>
<pre><code class="language-sql"><span class="hljs-keyword">update</span> product <span class="hljs-keyword">set</span> <span class="hljs-keyword">name</span> = <span class="hljs-string">'GTS'</span> <span class="hljs-keyword">where</span> <span class="hljs-keyword">name</span> = <span class="hljs-string">'TXC'</span>;
</code></pre>
<h2>一阶段</h2>
<p>过程:</p>
<ol>
<li>解析 SQL得到 SQL 的类型UPDATEproduct条件where name = 'TXC')等相关的信息。</li>
<li>查询前镜像:根据解析得到的条件信息,生成查询语句,定位数据。</li>
</ol>
<pre><code class="language-sql"><span class="hljs-keyword">select</span> <span class="hljs-keyword">id</span>, <span class="hljs-keyword">name</span>, since <span class="hljs-keyword">from</span> product <span class="hljs-keyword">where</span> <span class="hljs-keyword">name</span> = <span class="hljs-string">'TXC'</span>;
</code></pre>
<p>得到前镜像:</p>
<table>
<thead>
<tr>
<th>id</th>
<th>name</th>
<th>since</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>TXC</td>
<td>2014</td>
</tr>
</tbody>
</table>
<ol start="3">
<li>执行业务 SQL更新这条记录的 name 为 'GTS'。</li>
<li>查询后镜像:根据前镜像的结果,通过 <strong>主键</strong> 定位数据。</li>
</ol>
<pre><code class="language-sql"><span class="hljs-keyword">select</span> <span class="hljs-keyword">id</span>, <span class="hljs-keyword">name</span>, since <span class="hljs-keyword">from</span> product <span class="hljs-keyword">where</span> <span class="hljs-keyword">id</span> = <span class="hljs-number">1</span><span class="hljs-string">`;
</span></code></pre>
<p>得到后镜像:</p>
<table>
<thead>
<tr>
<th>id</th>
<th>name</th>
<th>since</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>GTS</td>
<td>2014</td>
</tr>
</tbody>
</table>
<ol start="5">
<li>插入回滚日志:把前后镜像数据以及业务 SQL 相关的信息组成一条回滚日志记录,插入到 <code>UNDO_LOG</code> 表中。</li>
</ol>
<pre><code class="language-json">{
<span class="hljs-attr">"branchId"</span>: <span class="hljs-number">641789253</span>,
<span class="hljs-attr">"undoItems"</span>: [{
<span class="hljs-attr">"afterImage"</span>: {
<span class="hljs-attr">"rows"</span>: [{
<span class="hljs-attr">"fields"</span>: [{
<span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
<span class="hljs-attr">"type"</span>: <span class="hljs-number">4</span>,
<span class="hljs-attr">"value"</span>: <span class="hljs-number">1</span>
}, {
<span class="hljs-attr">"name"</span>: <span class="hljs-string">"name"</span>,
<span class="hljs-attr">"type"</span>: <span class="hljs-number">12</span>,
<span class="hljs-attr">"value"</span>: <span class="hljs-string">"GTS"</span>
}, {
<span class="hljs-attr">"name"</span>: <span class="hljs-string">"since"</span>,
<span class="hljs-attr">"type"</span>: <span class="hljs-number">12</span>,
<span class="hljs-attr">"value"</span>: <span class="hljs-string">"2014"</span>
}]
}],
<span class="hljs-attr">"tableName"</span>: <span class="hljs-string">"product"</span>
},
<span class="hljs-attr">"beforeImage"</span>: {
<span class="hljs-attr">"rows"</span>: [{
<span class="hljs-attr">"fields"</span>: [{
<span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
<span class="hljs-attr">"type"</span>: <span class="hljs-number">4</span>,
<span class="hljs-attr">"value"</span>: <span class="hljs-number">1</span>
}, {
<span class="hljs-attr">"name"</span>: <span class="hljs-string">"name"</span>,
<span class="hljs-attr">"type"</span>: <span class="hljs-number">12</span>,
<span class="hljs-attr">"value"</span>: <span class="hljs-string">"TXC"</span>
}, {
<span class="hljs-attr">"name"</span>: <span class="hljs-string">"since"</span>,
<span class="hljs-attr">"type"</span>: <span class="hljs-number">12</span>,
<span class="hljs-attr">"value"</span>: <span class="hljs-string">"2014"</span>
}]
}],
<span class="hljs-attr">"tableName"</span>: <span class="hljs-string">"product"</span>
},
<span class="hljs-attr">"sqlType"</span>: <span class="hljs-string">"UPDATE"</span>
}],
<span class="hljs-attr">"xid"</span>: <span class="hljs-string">"xid:xxx"</span>
}
</code></pre>
<ol start="6">
<li>提交前,向 TC 注册分支:申请 <code>product</code> 表中,主键值等于 1 的记录的 <strong>全局锁</strong></li>
<li>本地事务提交:业务数据的更新和前面步骤中生成的 UNDO LOG 一并提交。</li>
<li>将本地事务提交的结果上报给 TC。</li>
</ol>
<h2>二阶段-回滚</h2>
<ol>
<li>收到 TC 的分支回滚请求,开启一个本地事务,执行如下操作。</li>
<li>通过 XID 和 Branch ID 查找到相应的 UNDO LOG 记录。</li>
<li>数据校验:拿 UNDO LOG 中的后镜与当前数据进行比较,如果有不同,说明数据被当前全局事务之外的动作做了修改。这种情况,需要根据配置策略来做处理,详细的说明在另外的文档中介绍。</li>
<li>根据 UNDO LOG 中的前镜像和业务 SQL 的相关信息生成并执行回滚的语句:</li>
</ol>
<pre><code class="language-sql"><span class="hljs-keyword">update</span> product <span class="hljs-keyword">set</span> <span class="hljs-keyword">name</span> = <span class="hljs-string">'TXC'</span> <span class="hljs-keyword">where</span> <span class="hljs-keyword">id</span> = <span class="hljs-number">1</span>;
</code></pre>
<ol start="5">
<li>提交本地事务。并把本地事务的执行结果(即分支事务回滚的结果)上报给 TC。</li>
</ol>
<h2>二阶段-提交</h2>
<ol>
<li>收到 TC 的分支提交请求,把请求放入一个异步任务的队列中,马上返回提交成功的结果给 TC。</li>
<li>异步任务阶段的分支提交请求将异步和批量地删除相应 UNDO LOG 记录。</li>
</ol>
<h1>附录</h1>
<h2>回滚日志表</h2>
<p>UNDO_LOG Table不同数据库在类型上会略有差别。</p>
<p>以 MySQL 为例:</p>
<table>
<thead>
<tr>
<th>Field</th>
<th>Type</th>
</tr>
</thead>
<tbody>
<tr>
<td>branch_id</td>
<td>bigint PK</td>
</tr>
<tr>
<td>xid</td>
<td>varchar(100)</td>
</tr>
<tr>
<td>rollback_info</td>
<td>longblob</td>
</tr>
<tr>
<td>log_status</td>
<td>tinyint</td>
</tr>
<tr>
<td>log_created</td>
<td>datetime</td>
</tr>
<tr>
<td>log_modified</td>
<td>datetime</td>
</tr>
<tr>
<td>ext</td>
<td>varchar(100)</td>
</tr>
</tbody>
</table>
<pre><code class="language-sql"><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> <span class="hljs-string">`undo_log`</span> (
<span class="hljs-string">`id`</span> <span class="hljs-built_in">bigint</span>(<span class="hljs-number">20</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> AUTO_INCREMENT,
<span class="hljs-string">`branch_id`</span> <span class="hljs-built_in">bigint</span>(<span class="hljs-number">20</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>,
<span class="hljs-string">`xid`</span> <span class="hljs-built_in">varchar</span>(<span class="hljs-number">100</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>,
<span class="hljs-string">`rollback_info`</span> longblob <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>,
<span class="hljs-string">`log_status`</span> <span class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>,
<span class="hljs-string">`log_created`</span> datetime <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>,
<span class="hljs-string">`log_modified`</span> datetime <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>,
<span class="hljs-string">`ext`</span> <span class="hljs-built_in">varchar</span>(<span class="hljs-number">100</span>),
PRIMARY <span class="hljs-keyword">KEY</span> (<span class="hljs-string">`id`</span>),
<span class="hljs-keyword">KEY</span> <span class="hljs-string">`idx_unionkey`</span> (<span class="hljs-string">`xid`</span>,<span class="hljs-string">`branch_id`</span>)
) <span class="hljs-keyword">ENGINE</span>=<span class="hljs-keyword">InnoDB</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">CHARSET</span>=utf8;
</code></pre>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>愿景</h3><p>Fescar 是一款阿里巴巴开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。</p></div><div class="col col-6"><dl><dt>文档</dt><dd><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">什么是 Fescar</a></dd><dd><a href="/zh-cn/docs/quickstart.html" target="_self">快速开始</a></dd></dl></div><div class="col col-6"><dl><dt>资源</dt><dd><a href="/zh-cn/blog/index.html" target="_self">博客</a></dd><dd><a href="/zh-cn/community/index.html" target="_self">社区</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Fescar</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>
window.rootPath = '';
</script>
<script src="/build/documentation.js"></script>
</body>
</html>

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,213 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<meta name="keywords" content="fescar_mertics" />
<meta name="description" content="fescar_mertics" />
<!-- 网页标签标题 -->
<title>fescar_mertics</title>
<link rel="shortcut icon" href="https://img.alicdn.com/tfs/TB1O1p6JzTpK1RjSZKPXXa3UpXa-64-64.png"/>
<link rel="stylesheet" href="/build/documentation.css" />
</head>
<body>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/zh-cn/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal">En</span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/zh-cn/index.html" target="_self">首页</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">文档</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/blog/index.html" target="_self">博客</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/community/index.html" target="_self">社区</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>文档</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Fescar</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>概述<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">什么是 Fescar</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/terminology.html" target="_self">术语表</a></li></ul></li><li style="height:144px;overflow:hidden" class="menu-item menu-item-level-2"><span>设计原理<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/fescar_at.html" target="_self">Fescar AT 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/fescar_tcc.html" target="_self">Fescar TCC 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/fescar_mertics.html" target="_self">Metrics设计</a></li></ul></li><li style="height:216px;overflow:hidden" class="menu-item menu-item-level-2"><span>开发指南<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/spring.html" target="_self">Spring 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/api.html" target="_self">API 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/microservice.html" target="_self">微服务框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/ormframework.html" target="_self">ORM 框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/datasource.html" target="_self">数据源类型支持</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/ops/operation.html" target="_self">运维指南</a></li><li style="height:216px;overflow:hidden" class="menu-item menu-item-level-2"><span>开源共建<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/contribution.html" target="_self">社区贡献</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/activity.html" target="_self">有奖活动</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/question.html" target="_self">提交问题</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/roadmap.html" target="_self">社区规划</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/contact.html" target="_self">联系我们</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/faq.html" target="_self">常见问题</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h3>Metrics</h3>
<h4>设计思路</h4>
<ol>
<li>Fescar作为一个被集成的数据一致性框架Metrics模块将尽可能少的使用第三方依赖以降低发生冲突的风险</li>
<li>Metrics模块将竭力争取更高的度量性能和更低的资源开销尽可能降低开启后带来的副作用</li>
<li>插件式——Metrics是否激活、数据如何发布去取决于是否引入了对应的依赖例如在TC Server中引入<code>fescar-metrics-prometheus</code>,则自动启用并将度量数据发布到<a href="https://github.com/prometheus">Prometheus</a></li>
<li>不使用Spring使用SPI(Service Provider Interface)加载扩展;</li>
<li>初始仅发布核心Transaction相关指标之后结合社区的需求逐步完善运维方面的所有其他指标。</li>
</ol>
<h4>模块说明</h4>
<p>由1个核心API模块<code>fescar-metrics-api</code>和N个对接实现模块如<code>fescar-metrics-prometheus</code>构成:</p>
<ul>
<li>fescar-metrics-api模块</li>
</ul>
<p>此模块是Metrics的核心将作为Fescar基础架构的一部分被TC、TM和RM引用它内部<strong>没有任何具体实现代码</strong>,仅包含接口定义,定义的内容包括:</p>
<ol>
<li>Meter类接口<code>Gauge</code><code>Counter</code><code>Timer</code>...</li>
<li>注册容器接口<code>Registry</code></li>
<li>Measurement发布接口<code>Publisher</code></li>
</ol>
<blockquote>
<p>提示Metrics本身在开源领域也已有很多实现例如</p>
<ol>
<li><a href="https://github.com/Netflix/spectator">Netflix-Spectator</a></li>
<li><a href="https://github.com/dropwizard/metrics">Dropwizard-Metrics</a></li>
<li><a href="https://github.com/dubbo/dubbo-metrics">Dubbo-Metrics</a></li>
</ol>
</blockquote>
<blockquote>
<p>它们有的轻而敏捷,有的重而强大,由于也是“实现”,因此不会纳入<code>fescar-metrics-api</code>中,避免实现绑定。</p>
</blockquote>
<ul>
<li>fescar-metrics-prometheus模块</li>
</ul>
<p>这是我们默认提供的Metrics实现不使用其它Metrics开源实现并轻量级的实现了以下三个Meter</p>
<table>
<thead>
<tr>
<th>Meter类型</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>Gauge</td>
<td>单一最新值度量器</td>
</tr>
<tr>
<td>Counter</td>
<td>单一累加度量器,可增可减</td>
</tr>
<tr>
<td>Summary</td>
<td>多Measurement输出计数器将输出<code>total</code>(合计)、<code>count</code>(计数)、<code>max</code>(最大)、<code>average</code>(合计/计数)和<code>tps</code>(合计/时间间隔),无单位</td>
</tr>
<tr>
<td>Timer</td>
<td>多Measurement输出计时器将输出<code>total</code>(合计)、<code>count</code>(计数)、<code>max</code>(最大)和<code>average</code>(合计/计数),支持微秒为单位累计</td>
</tr>
</tbody>
</table>
<blockquote>
<p>说明:</p>
<ol>
<li>未来可能增加更丰富复杂的度量器例如Histogram这是一种可以本地统计聚合75th, 90th, 95th, 98th, 99th,99.9th...的度量器,适合某些场合,但需要更多内存。</li>
<li>所有的计量器都将继承自Meter所有的计量器执行measure()方法后都将归一化的生成1或N个Measurement结果。</li>
</ol>
</blockquote>
<p>它也会实现一个内存的Registry和PrometheusExporter将度量数据同步给Prometheus。</p>
<blockquote>
<p>说明不同的监控系统采集度量数据的方式不尽相同例如Zabbix支持用zabbix-agent推送Prometheus则推荐使用prometheus-server<a href="https://prometheus.io/docs/practices/pushing/">拉取</a>的方式;同样数据交换协议也不同,因此往往需要逐一适配。</p>
</blockquote>
<h4>如何使用</h4>
<h5>引入依赖</h5>
<p>如果需要开启TC的Metrics只需要在<code>fescar-server</code>的pom中增加</p>
<pre><code class="language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dependencies</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>${project.groupId}<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>fescar-core<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
<span class="hljs-comment">&lt;!--导入依赖启用Metrics--&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>${project.groupId}<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>fescar-metrics-prometheus<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>commons-lang<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>commons-lang<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.testng<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>testng<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">scope</span>&gt;</span>test<span class="hljs-tag">&lt;/<span class="hljs-name">scope</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">dependencies</span>&gt;</span>
</code></pre>
<p>之后启动TC即可在<code>http://tc-server-ip:9898/metrics</code>上获取到Metrics的文本格式数据。</p>
<blockquote>
<p>提示:默认使用<code>9898</code>端口Prometheus已登记的端口列表<a href="https://github.com/prometheus/prometheus/wiki/Default-port-allocations">在此</a>,如果想更换端口,可通过<code>metrics.exporter.prometheus.port</code>配置修改。</p>
</blockquote>
<h5>下载并启动Prometheus</h5>
<p>下载完毕后修改Prometheus的配置文件<code>prometheus.yml</code>,在<code>scrape_configs</code>中增加一项抓取Fescar的度量数据</p>
<pre><code class="language-yaml"><span class="hljs-attr">scrape_configs:</span>
<span class="hljs-comment"># The job name is added as a label `job=&lt;job_name&gt;` to any timeseries scraped from this config.</span>
<span class="hljs-attr"> - job_name:</span> <span class="hljs-string">'prometheus'</span>
<span class="hljs-comment"># metrics_path defaults to '/metrics'</span>
<span class="hljs-comment"># scheme defaults to 'http'.</span>
<span class="hljs-attr"> static_configs:</span>
<span class="hljs-attr"> - targets:</span> <span class="hljs-string">['localhost:9090']</span>
<span class="hljs-attr"> - job_name:</span> <span class="hljs-string">'fescar'</span>
<span class="hljs-comment"># metrics_path defaults to '/metrics'</span>
<span class="hljs-comment"># scheme defaults to 'http'.</span>
<span class="hljs-attr"> static_configs:</span>
<span class="hljs-attr"> - targets:</span> <span class="hljs-string">['tc-server-ip:9898']</span>
</code></pre>
<h5>查看数据输出</h5>
<p>推荐结合配置<a href="https://prometheus.io/docs/visualization/grafana/">Grafana</a>获得更好的查询效果初期Fescar导出的Metrics包括</p>
<ul>
<li>TC :</li>
</ul>
<table>
<thead>
<tr>
<th>Metrics</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>fescar.transaction(role=tc,meter=counter,status=active/committed/rollback)</td>
<td>当前活动中/已提交/已回滚的事务总数</td>
</tr>
<tr>
<td>fescar.transaction(role=tc,meter=summary,statistic=count,status=committed/rollback)</td>
<td>当前周期内提交/回滚的事务数</td>
</tr>
<tr>
<td>fescar.transaction(role=tc,meter=summary,statistic=tps,status=committed/rollback)</td>
<td>当前周期内提交/回滚的事务TPS(transaction per second)</td>
</tr>
<tr>
<td>fescar.transaction(role=tc,meter=timer,statistic=total,status=committed/rollback)</td>
<td>当前周期内提交/回滚的事务耗时总和</td>
</tr>
<tr>
<td>fescar.transaction(role=tc,meter=timer,statistic=count,status=committed/rollback)</td>
<td>当前周期内提交/回滚的事务数</td>
</tr>
<tr>
<td>fescar.transaction(role=tc,meter=timer,statistic=average,status=committed/rollback)</td>
<td>当前周期内提交/回滚的事务平均耗时</td>
</tr>
<tr>
<td>fescar.transaction(role=tc,meter=timer,statistic=max,status=committed/rollback)</td>
<td>当前周期内提交/回滚的事务最大耗时</td>
</tr>
</tbody>
</table>
<blockquote>
<p>提示fescar.transaction(role=tc,meter=summary,statistic=count,status=committed/rollback)和fescar.transaction(role=tc,meter=timer,statistic=count,status=committed/rollback)的值可能相同,但它们来源于两个不同的度量器。</p>
</blockquote>
<ul>
<li>TM</li>
</ul>
<p>稍后实现,包括诸如:
fescar.transaction(role=tm,name={GlobalTransactionalName},meter=counter,status=active/committed/rollback) : 以GlobalTransactionalName为维度区分不同Transactional的状态。</p>
<ul>
<li>RM</li>
</ul>
<p>稍后实现,包括诸如:
fescar.transaction(role=rm,name={BranchTransactionalName},mode=at/mt,meter=counter,status=active/committed/rollback)以BranchTransactionalName为维度以及AT/MT维度区分不同分支Transactional的状态。</p>
<h4>如何扩展</h4>
<p>如果有下面几种情况:</p>
<ol>
<li>您不是使用Prometheus作为运维监控系统但希望能够将Fescar的Metrics数据集成进Dashboard中</li>
<li>您需要更复杂强大的度量器类型这些度量器在其他Metrics实现库中已有希望集成这些第三方依赖直接使用</li>
<li>您需要改变默认Metric的Measurement输出例如在Timer中增加一个<code>min</code><code>sd</code>(方差)</li>
<li>...</li>
</ol>
<p>那么需要自行扩展Metrics的实现请创建新的模块项目例如<code>fescar-metrics-xxxx</code>,之后:</p>
<ul>
<li>针对1您需要实现新的Exporter</li>
<li>针对2您可以改变默认Registry的实现返回第三方的Meter计量器实现</li>
<li>针对3您可以修改对应Meter的实现包括<code>measure()</code>方法返回的Measurement列表。</li>
</ul>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>愿景</h3><p>Fescar 是一款阿里巴巴开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。</p></div><div class="col col-6"><dl><dt>文档</dt><dd><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">什么是 Fescar</a></dd><dd><a href="/zh-cn/docs/quickstart.html" target="_self">快速开始</a></dd></dl></div><div class="col col-6"><dl><dt>资源</dt><dd><a href="/zh-cn/blog/index.html" target="_self">博客</a></dd><dd><a href="/zh-cn/community/index.html" target="_self">社区</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Fescar</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>
window.rootPath = '';
</script>
<script src="/build/documentation.js"></script>
</body>
</html>

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,44 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<meta name="keywords" content="fescar_tcc" />
<meta name="description" content="fescar_tcc" />
<!-- 网页标签标题 -->
<title>fescar_tcc</title>
<link rel="shortcut icon" href="https://img.alicdn.com/tfs/TB1O1p6JzTpK1RjSZKPXXa3UpXa-64-64.png"/>
<link rel="stylesheet" href="/build/documentation.css" />
</head>
<body>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/zh-cn/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal">En</span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/zh-cn/index.html" target="_self">首页</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">文档</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/blog/index.html" target="_self">博客</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/community/index.html" target="_self">社区</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>文档</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Fescar</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>概述<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">什么是 Fescar</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/terminology.html" target="_self">术语表</a></li></ul></li><li style="height:144px;overflow:hidden" class="menu-item menu-item-level-2"><span>设计原理<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/fescar_at.html" target="_self">Fescar AT 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/fescar_tcc.html" target="_self">Fescar TCC 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/fescar_mertics.html" target="_self">Metrics设计</a></li></ul></li><li style="height:216px;overflow:hidden" class="menu-item menu-item-level-2"><span>开发指南<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/spring.html" target="_self">Spring 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/api.html" target="_self">API 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/microservice.html" target="_self">微服务框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/ormframework.html" target="_self">ORM 框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/datasource.html" target="_self">数据源类型支持</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/ops/operation.html" target="_self">运维指南</a></li><li style="height:216px;overflow:hidden" class="menu-item menu-item-level-2"><span>开源共建<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/contribution.html" target="_self">社区贡献</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/activity.html" target="_self">有奖活动</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/question.html" target="_self">提交问题</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/roadmap.html" target="_self">社区规划</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/contact.html" target="_self">联系我们</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/faq.html" target="_self">常见问题</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>Fescar TCC 模式</h1>
<p>回顾总览中的描述:一个分布式的全局事务,整体是 <strong>两阶段提交</strong> 的模型。全局事务是由若干分支事务组成的,分支事务要满足 <strong>两阶段提交</strong> 的模型要求,即需要每个分支事务都具备自己的:</p>
<ul>
<li>一阶段 prepare 行为</li>
<li>二阶段 commit 或 rollback 行为</li>
</ul>
<p><img src="https://upload-images.jianshu.io/upload_images/4420767-e48f0284a037d1df.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="Overview of a global transaction"></p>
<p>根据两阶段行为模式的不同,我们将分支事务划分为 <strong>Automatic (Branch) Transaction Mode</strong><strong>TCC (Branch) Transaction Mode</strong>.</p>
<p>AT 模式(<a href="">参考链接 TBD</a>)基于 <strong>支持本地 ACID 事务</strong><strong>关系型数据库</strong></p>
<ul>
<li>一阶段 prepare 行为:在本地事务中,一并提交业务数据更新和相应回滚日志记录。</li>
<li>二阶段 commit 行为:马上成功结束,<strong>自动</strong> 异步批量清理回滚日志。</li>
<li>二阶段 rollback 行为:通过回滚日志,<strong>自动</strong> 生成补偿操作,完成数据回滚。</li>
</ul>
<p>相应的TCC 模式,不依赖于底层数据资源的事务支持:</p>
<ul>
<li>一阶段 prepare 行为:调用 <strong>自定义</strong> 的 prepare 逻辑。</li>
<li>二阶段 commit 行为:调用 <strong>自定义</strong> 的 commit 逻辑。</li>
<li>二阶段 rollback 行为:调用 <strong>自定义</strong> 的 rollback 逻辑。</li>
</ul>
<p>所谓 TCC 模式,是指支持把 <strong>自定义</strong> 的分支事务纳入到全局事务的管理中。</p>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>愿景</h3><p>Fescar 是一款阿里巴巴开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。</p></div><div class="col col-6"><dl><dt>文档</dt><dd><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">什么是 Fescar</a></dd><dd><a href="/zh-cn/docs/quickstart.html" target="_self">快速开始</a></dd></dl></div><div class="col col-6"><dl><dt>资源</dt><dd><a href="/zh-cn/blog/index.html" target="_self">博客</a></dd><dd><a href="/zh-cn/community/index.html" target="_self">社区</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Fescar</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>
window.rootPath = '';
</script>
<script src="/build/documentation.js"></script>
</body>
</html>

View File

@ -0,0 +1,6 @@
{
"filename": "fescar_tcc.md",
"__html": "<h1>Fescar TCC 模式</h1>\n<p>回顾总览中的描述:一个分布式的全局事务,整体是 <strong>两阶段提交</strong> 的模型。全局事务是由若干分支事务组成的,分支事务要满足 <strong>两阶段提交</strong> 的模型要求,即需要每个分支事务都具备自己的:</p>\n<ul>\n<li>一阶段 prepare 行为</li>\n<li>二阶段 commit 或 rollback 行为</li>\n</ul>\n<p><img src=\"https://upload-images.jianshu.io/upload_images/4420767-e48f0284a037d1df.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240\" alt=\"Overview of a global transaction\"></p>\n<p>根据两阶段行为模式的不同,我们将分支事务划分为 <strong>Automatic (Branch) Transaction Mode</strong> 和 <strong>TCC (Branch) Transaction Mode</strong>.</p>\n<p>AT 模式(<a href=\"\">参考链接 TBD</a>)基于 <strong>支持本地 ACID 事务</strong> 的 <strong>关系型数据库</strong></p>\n<ul>\n<li>一阶段 prepare 行为:在本地事务中,一并提交业务数据更新和相应回滚日志记录。</li>\n<li>二阶段 commit 行为:马上成功结束,<strong>自动</strong> 异步批量清理回滚日志。</li>\n<li>二阶段 rollback 行为:通过回滚日志,<strong>自动</strong> 生成补偿操作,完成数据回滚。</li>\n</ul>\n<p>相应的TCC 模式,不依赖于底层数据资源的事务支持:</p>\n<ul>\n<li>一阶段 prepare 行为:调用 <strong>自定义</strong> 的 prepare 逻辑。</li>\n<li>二阶段 commit 行为:调用 <strong>自定义</strong> 的 commit 逻辑。</li>\n<li>二阶段 rollback 行为:调用 <strong>自定义</strong> 的 rollback 逻辑。</li>\n</ul>\n<p>所谓 TCC 模式,是指支持把 <strong>自定义</strong> 的分支事务纳入到全局事务的管理中。</p>\n",
"link": "/zh-cn/docs/architecture/fescar_tcc.html",
"meta": {}
}

View File

@ -12,7 +12,7 @@
<link rel="stylesheet" href="/build/documentation.css" />
</head>
<body>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/zh-cn/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal">En</span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/zh-cn/index.html" target="_self">首页</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/zh-cn/docs/overview/what_is_seata.html" target="_self">文档</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/blog/index.html" target="_self">博客</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/community/index.html" target="_self">社区</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>文档</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Seata</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>概述<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/what_is_seata.html" target="_self">什么是 Seata</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/terminology.html" target="_self">术语表</a></li></ul></li><li style="height:144px;overflow:hidden" class="menu-item menu-item-level-2"><span>设计原理<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/seata_at.html" target="_self">Seata AT 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/seata_tcc.html" target="_self">Seata TCC 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/seata_mertics.html" target="_self">Metrics设计</a></li></ul></li><li style="height:216px;overflow:hidden" class="menu-item menu-item-level-2"><span>开发指南<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/spring.html" target="_self">Spring 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/api.html" target="_self">API 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/microservice.html" target="_self">微服务框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/ormframework.html" target="_self">ORM 框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/datasource.html" target="_self">数据源类型支持</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/ops/operation.html" target="_self">运维指南</a></li><li style="height:216px;overflow:hidden" class="menu-item menu-item-level-2"><span>开源共建<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/contribution.html" target="_self">社区贡献</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/activity.html" target="_self">有奖活动</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/question.html" target="_self">提交问题</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/roadmap.html" target="_self">社区规划</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/contact.html" target="_self">联系我们</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/faq.html" target="_self">常见问题</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>dfdaemon</h1>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/zh-cn/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal">En</span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/zh-cn/index.html" target="_self">首页</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">文档</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/blog/index.html" target="_self">博客</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/community/index.html" target="_self">社区</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>文档</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Fescar</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>概述<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">什么是 Fescar</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/terminology.html" target="_self">术语表</a></li></ul></li><li style="height:144px;overflow:hidden" class="menu-item menu-item-level-2"><span>设计原理<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/fescar_at.html" target="_self">Fescar AT 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/fescar_tcc.html" target="_self">Fescar TCC 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/fescar_mertics.html" target="_self">Metrics设计</a></li></ul></li><li style="height:216px;overflow:hidden" class="menu-item menu-item-level-2"><span>开发指南<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/spring.html" target="_self">Spring 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/api.html" target="_self">API 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/microservice.html" target="_self">微服务框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/ormframework.html" target="_self">ORM 框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/datasource.html" target="_self">数据源类型支持</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/ops/operation.html" target="_self">运维指南</a></li><li style="height:216px;overflow:hidden" class="menu-item menu-item-level-2"><span>开源共建<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/contribution.html" target="_self">社区贡献</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/activity.html" target="_self">有奖活动</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/question.html" target="_self">提交问题</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/roadmap.html" target="_self">社区规划</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/contact.html" target="_self">联系我们</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/faq.html" target="_self">常见问题</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>dfdaemon</h1>
<p>dfdaemon is a proxy between pouchd/dockerd and registry used for pulling images. You can use the dfdaemon command in the command line tool.</p>
<h2>Name</h2>
<p>dfdaemon - a proxy between pouchd/dockerd and registry used for pulling images.</p>
@ -53,7 +53,7 @@
<h2>Files</h2>
<h3>Local Repository Directory</h3>
<p>The default local repository is <code>${HOME}/.small-dragonfly/dfdaemon/data/</code>. You can change it by setting the option <code>-localrep</code>.</p>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>愿景</h3><p>Seata 是一款阿里巴巴开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。</p></div><div class="col col-6"><dl><dt>文档</dt><dd><a href="/zh-cn/docs/overview/what_is_seata.html" target="_self">什么是 Seata</a></dd><dd><a href="/zh-cn/docs/quickstart.html" target="_self">快速开始</a></dd></dl></div><div class="col col-6"><dl><dt>资源</dt><dd><a href="/zh-cn/blog/index.html" target="_self">博客</a></dd><dd><a href="/zh-cn/community/index.html" target="_self">社区</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Seata</span></div></div></footer></div></div>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>愿景</h3><p>Fescar 是一款阿里巴巴开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。</p></div><div class="col col-6"><dl><dt>文档</dt><dd><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">什么是 Fescar</a></dd><dd><a href="/zh-cn/docs/quickstart.html" target="_self">快速开始</a></dd></dl></div><div class="col col-6"><dl><dt>资源</dt><dd><a href="/zh-cn/blog/index.html" target="_self">博客</a></dd><dd><a href="/zh-cn/community/index.html" target="_self">社区</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Fescar</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>

View File

@ -1,6 +1,6 @@
{
"filename": "dfdaemon.md",
"__html": "<h1>dfdaemon</h1>\n<p>dfdaemon is a proxy between pouchd/dockerd and registry used for pulling images. You can use the dfdaemon command in the command line tool.</p>\n<h2>Name</h2>\n<p>dfdaemon - a proxy between pouchd/dockerd and registry used for pulling images.</p>\n<h2>Synopsis</h2>\n<p><code>dfdaemon [options]...</code></p>\n<h2>Options</h2>\n<pre><code class=\"language-text\"> -callsystem string\n caller name (default &quot;com_ops_dragonfly&quot;)\n -certpem string\n cert.pem file path\n -dfpath string\n dfget path (default is your installed path)\n -h help\n -hostIp string\n dfdaemon host ip, default: 127.0.0.1 (default &quot;127.0.0.1&quot;)\n -keypem string\n key.pem file path\n -localrepo string\n temp output dir of dfdaemon (default is &quot;${HOME}/.small-dragonfly/dfdaemon/data&quot;)\n -maxprocs int\n the maximum number of CPUs that the dfdaemon can use (default 4)\n -notbs\n not try back source to download if throw exception (default true)\n -port uint\n dfdaemon will listen the port (default 65001)\n -ratelimit string\n net speed limit,format:xxxM/K\n -registry string\n registry addr(https://abc.xx.x or http://abc.xx.x) and must exist if dfdaemon is used to mirror mode\n -rule string\n download the url by P2P if url matches the specified pattern,format:reg1,reg2,reg3\n -urlfilter string\n filter specified url fields (default &quot;Signature&amp;Expires&amp;OSSAccessKeyId&quot;)\n -v version\n -verbose\n verbose\n</code></pre>\n<h2>Files</h2>\n<h3>Local Repository Directory</h3>\n<p>The default local repository is <code>${HOME}/.small-dragonfly/dfdaemon/data/</code>. You can change it by setting the option <code>-localrep</code>.</p>\n",
"link": "\\zh-cn\\docs\\cli_ref\\dfdaemon.html",
"link": "/zh-cn/docs/cli_ref/dfdaemon.html",
"meta": {}
}

View File

@ -12,10 +12,10 @@
<link rel="stylesheet" href="/build/documentation.css" />
</head>
<body>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/zh-cn/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal">En</span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/zh-cn/index.html" target="_self">首页</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/zh-cn/docs/overview/what_is_seata.html" target="_self">文档</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/blog/index.html" target="_self">博客</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/community/index.html" target="_self">社区</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>文档</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Seata</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>概述<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/what_is_seata.html" target="_self">什么是 Seata</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/terminology.html" target="_self">术语表</a></li></ul></li><li style="height:144px;overflow:hidden" class="menu-item menu-item-level-2"><span>设计原理<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/seata_at.html" target="_self">Seata AT 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/seata_tcc.html" target="_self">Seata TCC 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/seata_mertics.html" target="_self">Metrics设计</a></li></ul></li><li style="height:216px;overflow:hidden" class="menu-item menu-item-level-2"><span>开发指南<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/spring.html" target="_self">Spring 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/api.html" target="_self">API 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/microservice.html" target="_self">微服务框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/ormframework.html" target="_self">ORM 框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/datasource.html" target="_self">数据源类型支持</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/ops/operation.html" target="_self">运维指南</a></li><li style="height:216px;overflow:hidden" class="menu-item menu-item-level-2"><span>开源共建<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/contribution.html" target="_self">社区贡献</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/activity.html" target="_self">有奖活动</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/question.html" target="_self">提交问题</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/roadmap.html" target="_self">社区规划</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/contact.html" target="_self">联系我们</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/faq.html" target="_self">常见问题</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>dfget</h1>
<p>dfget is the client of Seata. You can use the dfget command in the command line tool.</p>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/zh-cn/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal">En</span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/zh-cn/index.html" target="_self">首页</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">文档</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/blog/index.html" target="_self">博客</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/community/index.html" target="_self">社区</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>文档</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Fescar</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>概述<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">什么是 Fescar</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/terminology.html" target="_self">术语表</a></li></ul></li><li style="height:144px;overflow:hidden" class="menu-item menu-item-level-2"><span>设计原理<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/fescar_at.html" target="_self">Fescar AT 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/fescar_tcc.html" target="_self">Fescar TCC 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/fescar_mertics.html" target="_self">Metrics设计</a></li></ul></li><li style="height:216px;overflow:hidden" class="menu-item menu-item-level-2"><span>开发指南<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/spring.html" target="_self">Spring 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/api.html" target="_self">API 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/microservice.html" target="_self">微服务框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/ormframework.html" target="_self">ORM 框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/datasource.html" target="_self">数据源类型支持</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/ops/operation.html" target="_self">运维指南</a></li><li style="height:216px;overflow:hidden" class="menu-item menu-item-level-2"><span>开源共建<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/contribution.html" target="_self">社区贡献</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/activity.html" target="_self">有奖活动</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/question.html" target="_self">提交问题</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/roadmap.html" target="_self">社区规划</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/contact.html" target="_self">联系我们</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/faq.html" target="_self">常见问题</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>dfget</h1>
<p>dfget is the client of Fescar. You can use the dfget command in the command line tool.</p>
<h2>Name</h2>
<p>dfget - the client of Seata, a non-interactive P2P downloader.</p>
<p>dfget - the client of Fescar, a non-interactive P2P downloader.</p>
<h2>Synopsis</h2>
<p><code>dfget -u [URL] [options]...</code></p>
<h2>Options</h2>
@ -74,7 +74,7 @@
└── meta/
└── host.meta # stores meta information: peer server port
</code></pre>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>愿景</h3><p>Seata 是一款阿里巴巴开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。</p></div><div class="col col-6"><dl><dt>文档</dt><dd><a href="/zh-cn/docs/overview/what_is_seata.html" target="_self">什么是 Seata</a></dd><dd><a href="/zh-cn/docs/quickstart.html" target="_self">快速开始</a></dd></dl></div><div class="col col-6"><dl><dt>资源</dt><dd><a href="/zh-cn/blog/index.html" target="_self">博客</a></dd><dd><a href="/zh-cn/community/index.html" target="_self">社区</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Seata</span></div></div></footer></div></div>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>愿景</h3><p>Fescar 是一款阿里巴巴开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。</p></div><div class="col col-6"><dl><dt>文档</dt><dd><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">什么是 Fescar</a></dd><dd><a href="/zh-cn/docs/quickstart.html" target="_self">快速开始</a></dd></dl></div><div class="col col-6"><dl><dt>资源</dt><dd><a href="/zh-cn/blog/index.html" target="_self">博客</a></dd><dd><a href="/zh-cn/community/index.html" target="_self">社区</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Fescar</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>

View File

@ -1,6 +1,6 @@
{
"filename": "dfget.md",
"__html": "<h1>dfget</h1>\n<p>dfget is the client of Seata. You can use the dfget command in the command line tool.</p>\n<h2>Name</h2>\n<p>dfget - the client of Seata, a non-interactive P2P downloader.</p>\n<h2>Synopsis</h2>\n<p><code>dfget -u [URL] [options]...</code></p>\n<h2>Options</h2>\n<pre><code> -h, --help show this help message and exit\n --url URL, -u URL will download a file from this url\n --output OUTPUT, -O OUTPUT, -o OUTPUT\n output path that not only contains the dir part but\n also name part\n --md5 MD5, -m MD5 expected file md5\n --callsystem CALLSYSTEM\n system name that executes dfget,its format is\n company_department_appName\n --notbs not back source when p2p fail\n --locallimit LOCALLIMIT, -s LOCALLIMIT\n rate limit about a single download task,its format is\n 20M/m/K/k\n --totallimit TOTALLIMIT\n rate limit about the whole host,its format is\n 20M/m/K/k\n --identifier IDENTIFIER, -i IDENTIFIER\n identify download task,it is available merely when md5\n param not exist\n --timeout TIMEOUT, --exceed TIMEOUT, -e TIMEOUT\n download timeout(second)\n --filter FILTER, -f FILTER\n filter some query params of url ,e.g. -f 'key&amp;sign'\n will filter key and sign query param.in this\n way,different urls correspond one same download task\n that can use p2p mode\n --showbar, -b show progress bar\n --pattern {p2p,cdn}, -p {p2p,cdn}\n download pattern,cdn pattern not support totallimit\n --version, -v version\n --node NODE, -n NODE specify nodes\n --console show log on console\n --header HEADER http header, e.g. --header=&quot;Accept: *&quot; --header=&quot;Host:\n abc&quot;\n --dfdaemon caller is from df-daemon\n</code></pre>\n<h2>Files</h2>\n<h3>/etc/dragonfly.conf</h3>\n<p>This is the default configuration file for dfget, which specifies the address of the SuperNode.</p>\n<pre><code class=\"language-ini\"><span class=\"hljs-section\">[node]</span>\n<span class=\"hljs-attr\">address</span>=<span class=\"hljs-number\">127.0</span>.<span class=\"hljs-number\">0.1</span>,<span class=\"hljs-number\">127.0</span>.<span class=\"hljs-number\">0.2</span>\n</code></pre>\n<h3>${HOME}/.small-dragonfly</h3>\n<p>This directory is created by dfget when you start it for the first time.</p>\n<pre><code class=\"language-text\">.small-dragonfly/\n├── data/ # stores temporary data downloaded by dfget\n├── dfdaemon/\n│   └── data/ # default, stores temporary data generated by dfdaemon\n├── logs/\n│   ├── dfclient.log # dfget's log file\n│   ├── dfserver.log # log file of peer server launched by dfget\n│   └── dfdaemon.log # dfdaemon's log file\n└── meta/\n └── host.meta # stores meta information: peer server port\n</code></pre>\n",
"link": "\\zh-cn\\docs\\cli_ref\\dfget.html",
"__html": "<h1>dfget</h1>\n<p>dfget is the client of Fescar. You can use the dfget command in the command line tool.</p>\n<h2>Name</h2>\n<p>dfget - the client of Fescar, a non-interactive P2P downloader.</p>\n<h2>Synopsis</h2>\n<p><code>dfget -u [URL] [options]...</code></p>\n<h2>Options</h2>\n<pre><code> -h, --help show this help message and exit\n --url URL, -u URL will download a file from this url\n --output OUTPUT, -O OUTPUT, -o OUTPUT\n output path that not only contains the dir part but\n also name part\n --md5 MD5, -m MD5 expected file md5\n --callsystem CALLSYSTEM\n system name that executes dfget,its format is\n company_department_appName\n --notbs not back source when p2p fail\n --locallimit LOCALLIMIT, -s LOCALLIMIT\n rate limit about a single download task,its format is\n 20M/m/K/k\n --totallimit TOTALLIMIT\n rate limit about the whole host,its format is\n 20M/m/K/k\n --identifier IDENTIFIER, -i IDENTIFIER\n identify download task,it is available merely when md5\n param not exist\n --timeout TIMEOUT, --exceed TIMEOUT, -e TIMEOUT\n download timeout(second)\n --filter FILTER, -f FILTER\n filter some query params of url ,e.g. -f 'key&amp;sign'\n will filter key and sign query param.in this\n way,different urls correspond one same download task\n that can use p2p mode\n --showbar, -b show progress bar\n --pattern {p2p,cdn}, -p {p2p,cdn}\n download pattern,cdn pattern not support totallimit\n --version, -v version\n --node NODE, -n NODE specify nodes\n --console show log on console\n --header HEADER http header, e.g. --header=&quot;Accept: *&quot; --header=&quot;Host:\n abc&quot;\n --dfdaemon caller is from df-daemon\n</code></pre>\n<h2>Files</h2>\n<h3>/etc/dragonfly.conf</h3>\n<p>This is the default configuration file for dfget, which specifies the address of the SuperNode.</p>\n<pre><code class=\"language-ini\"><span class=\"hljs-section\">[node]</span>\n<span class=\"hljs-attr\">address</span>=<span class=\"hljs-number\">127.0</span>.<span class=\"hljs-number\">0.1</span>,<span class=\"hljs-number\">127.0</span>.<span class=\"hljs-number\">0.2</span>\n</code></pre>\n<h3>${HOME}/.small-dragonfly</h3>\n<p>This directory is created by dfget when you start it for the first time.</p>\n<pre><code class=\"language-text\">.small-dragonfly/\n├── data/ # stores temporary data downloaded by dfget\n├── dfdaemon/\n│   └── data/ # default, stores temporary data generated by dfdaemon\n├── logs/\n│   ├── dfclient.log # dfget's log file\n│   ├── dfserver.log # log file of peer server launched by dfget\n│   └── dfdaemon.log # dfdaemon's log file\n└── meta/\n └── host.meta # stores meta information: peer server port\n</code></pre>\n",
"link": "/zh-cn/docs/cli_ref/dfget.html",
"meta": {}
}

View File

@ -12,9 +12,9 @@
<link rel="stylesheet" href="/build/documentation.css" />
</head>
<body>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/zh-cn/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal">En</span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/zh-cn/index.html" target="_self">首页</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/zh-cn/docs/overview/what_is_seata.html" target="_self">文档</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/blog/index.html" target="_self">博客</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/community/index.html" target="_self">社区</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>文档</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Seata</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>概述<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/what_is_seata.html" target="_self">什么是 Seata</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/terminology.html" target="_self">术语表</a></li></ul></li><li style="height:144px;overflow:hidden" class="menu-item menu-item-level-2"><span>设计原理<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/seata_at.html" target="_self">Seata AT 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/seata_tcc.html" target="_self">Seata TCC 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/seata_mertics.html" target="_self">Metrics设计</a></li></ul></li><li style="height:216px;overflow:hidden" class="menu-item menu-item-level-2"><span>开发指南<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/spring.html" target="_self">Spring 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/api.html" target="_self">API 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/microservice.html" target="_self">微服务框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/ormframework.html" target="_self">ORM 框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/datasource.html" target="_self">数据源类型支持</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/ops/operation.html" target="_self">运维指南</a></li><li style="height:216px;overflow:hidden" class="menu-item menu-item-level-2"><span>开源共建<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/contribution.html" target="_self">社区贡献</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/activity.html" target="_self">有奖活动</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/question.html" target="_self">提交问题</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/roadmap.html" target="_self">社区规划</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/contact.html" target="_self">联系我们</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/faq.html" target="_self">常见问题</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>有奖活动</h1>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/zh-cn/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal">En</span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/zh-cn/index.html" target="_self">首页</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">文档</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/blog/index.html" target="_self">博客</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/community/index.html" target="_self">社区</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>文档</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Fescar</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>概述<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">什么是 Fescar</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/terminology.html" target="_self">术语表</a></li></ul></li><li style="height:144px;overflow:hidden" class="menu-item menu-item-level-2"><span>设计原理<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/fescar_at.html" target="_self">Fescar AT 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/fescar_tcc.html" target="_self">Fescar TCC 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/fescar_mertics.html" target="_self">Metrics设计</a></li></ul></li><li style="height:216px;overflow:hidden" class="menu-item menu-item-level-2"><span>开发指南<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/spring.html" target="_self">Spring 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/api.html" target="_self">API 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/microservice.html" target="_self">微服务框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/ormframework.html" target="_self">ORM 框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/datasource.html" target="_self">数据源类型支持</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/ops/operation.html" target="_self">运维指南</a></li><li style="height:216px;overflow:hidden" class="menu-item menu-item-level-2"><span>开源共建<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/contribution.html" target="_self">社区贡献</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/activity.html" target="_self">有奖活动</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/question.html" target="_self">提交问题</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/roadmap.html" target="_self">社区规划</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/contact.html" target="_self">联系我们</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/faq.html" target="_self">常见问题</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>有奖活动</h1>
<p>TBD</p>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>愿景</h3><p>Seata 是一款阿里巴巴开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。</p></div><div class="col col-6"><dl><dt>文档</dt><dd><a href="/zh-cn/docs/overview/what_is_seata.html" target="_self">什么是 Seata</a></dd><dd><a href="/zh-cn/docs/quickstart.html" target="_self">快速开始</a></dd></dl></div><div class="col col-6"><dl><dt>资源</dt><dd><a href="/zh-cn/blog/index.html" target="_self">博客</a></dd><dd><a href="/zh-cn/community/index.html" target="_self">社区</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Seata</span></div></div></footer></div></div>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>愿景</h3><p>Fescar 是一款阿里巴巴开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。</p></div><div class="col col-6"><dl><dt>文档</dt><dd><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">什么是 Fescar</a></dd><dd><a href="/zh-cn/docs/quickstart.html" target="_self">快速开始</a></dd></dl></div><div class="col col-6"><dl><dt>资源</dt><dd><a href="/zh-cn/blog/index.html" target="_self">博客</a></dd><dd><a href="/zh-cn/community/index.html" target="_self">社区</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Fescar</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>

View File

@ -1,6 +1,6 @@
{
"filename": "activity.md",
"__html": "<h1>有奖活动</h1>\n<p>TBD</p>\n",
"link": "\\zh-cn\\docs\\community\\activity.html",
"link": "/zh-cn/docs/community/activity.html",
"meta": {}
}

View File

@ -12,9 +12,9 @@
<link rel="stylesheet" href="/build/documentation.css" />
</head>
<body>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/zh-cn/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal">En</span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/zh-cn/index.html" target="_self">首页</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/zh-cn/docs/overview/what_is_seata.html" target="_self">文档</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/blog/index.html" target="_self">博客</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/community/index.html" target="_self">社区</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>文档</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Seata</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>概述<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/what_is_seata.html" target="_self">什么是 Seata</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/terminology.html" target="_self">术语表</a></li></ul></li><li style="height:144px;overflow:hidden" class="menu-item menu-item-level-2"><span>设计原理<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/seata_at.html" target="_self">Seata AT 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/seata_tcc.html" target="_self">Seata TCC 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/seata_mertics.html" target="_self">Metrics设计</a></li></ul></li><li style="height:216px;overflow:hidden" class="menu-item menu-item-level-2"><span>开发指南<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/spring.html" target="_self">Spring 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/api.html" target="_self">API 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/microservice.html" target="_self">微服务框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/ormframework.html" target="_self">ORM 框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/datasource.html" target="_self">数据源类型支持</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/ops/operation.html" target="_self">运维指南</a></li><li style="height:216px;overflow:hidden" class="menu-item menu-item-level-2"><span>开源共建<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/contribution.html" target="_self">社区贡献</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/activity.html" target="_self">有奖活动</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/question.html" target="_self">提交问题</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/roadmap.html" target="_self">社区规划</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/contact.html" target="_self">联系我们</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/faq.html" target="_self">常见问题</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>联系我们</h1>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/zh-cn/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal">En</span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/zh-cn/index.html" target="_self">首页</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">文档</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/blog/index.html" target="_self">博客</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/community/index.html" target="_self">社区</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>文档</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Fescar</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>概述<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">什么是 Fescar</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/terminology.html" target="_self">术语表</a></li></ul></li><li style="height:144px;overflow:hidden" class="menu-item menu-item-level-2"><span>设计原理<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/fescar_at.html" target="_self">Fescar AT 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/fescar_tcc.html" target="_self">Fescar TCC 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/fescar_mertics.html" target="_self">Metrics设计</a></li></ul></li><li style="height:216px;overflow:hidden" class="menu-item menu-item-level-2"><span>开发指南<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/spring.html" target="_self">Spring 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/api.html" target="_self">API 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/microservice.html" target="_self">微服务框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/ormframework.html" target="_self">ORM 框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/datasource.html" target="_self">数据源类型支持</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/ops/operation.html" target="_self">运维指南</a></li><li style="height:216px;overflow:hidden" class="menu-item menu-item-level-2"><span>开源共建<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/contribution.html" target="_self">社区贡献</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/activity.html" target="_self">有奖活动</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/question.html" target="_self">提交问题</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/roadmap.html" target="_self">社区规划</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/contact.html" target="_self">联系我们</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/faq.html" target="_self">常见问题</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>联系我们</h1>
<p>TBD</p>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>愿景</h3><p>Seata 是一款阿里巴巴开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。</p></div><div class="col col-6"><dl><dt>文档</dt><dd><a href="/zh-cn/docs/overview/what_is_seata.html" target="_self">什么是 Seata</a></dd><dd><a href="/zh-cn/docs/quickstart.html" target="_self">快速开始</a></dd></dl></div><div class="col col-6"><dl><dt>资源</dt><dd><a href="/zh-cn/blog/index.html" target="_self">博客</a></dd><dd><a href="/zh-cn/community/index.html" target="_self">社区</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Seata</span></div></div></footer></div></div>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>愿景</h3><p>Fescar 是一款阿里巴巴开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。</p></div><div class="col col-6"><dl><dt>文档</dt><dd><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">什么是 Fescar</a></dd><dd><a href="/zh-cn/docs/quickstart.html" target="_self">快速开始</a></dd></dl></div><div class="col col-6"><dl><dt>资源</dt><dd><a href="/zh-cn/blog/index.html" target="_self">博客</a></dd><dd><a href="/zh-cn/community/index.html" target="_self">社区</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Fescar</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>

View File

@ -1,6 +1,6 @@
{
"filename": "contact.md",
"__html": "<h1>联系我们</h1>\n<p>TBD</p>\n",
"link": "\\zh-cn\\docs\\community\\contact.html",
"link": "/zh-cn/docs/community/contact.html",
"meta": {}
}

View File

@ -12,9 +12,9 @@
<link rel="stylesheet" href="/build/documentation.css" />
</head>
<body>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/zh-cn/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal">En</span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/zh-cn/index.html" target="_self">首页</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/zh-cn/docs/overview/what_is_seata.html" target="_self">文档</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/blog/index.html" target="_self">博客</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/community/index.html" target="_self">社区</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>文档</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Seata</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>概述<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/what_is_seata.html" target="_self">什么是 Seata</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/terminology.html" target="_self">术语表</a></li></ul></li><li style="height:144px;overflow:hidden" class="menu-item menu-item-level-2"><span>设计原理<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/seata_at.html" target="_self">Seata AT 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/seata_tcc.html" target="_self">Seata TCC 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/seata_mertics.html" target="_self">Metrics设计</a></li></ul></li><li style="height:216px;overflow:hidden" class="menu-item menu-item-level-2"><span>开发指南<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/spring.html" target="_self">Spring 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/api.html" target="_self">API 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/microservice.html" target="_self">微服务框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/ormframework.html" target="_self">ORM 框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/datasource.html" target="_self">数据源类型支持</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/ops/operation.html" target="_self">运维指南</a></li><li style="height:216px;overflow:hidden" class="menu-item menu-item-level-2"><span>开源共建<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/contribution.html" target="_self">社区贡献</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/activity.html" target="_self">有奖活动</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/question.html" target="_self">提交问题</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/roadmap.html" target="_self">社区规划</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/contact.html" target="_self">联系我们</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/faq.html" target="_self">常见问题</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>社区贡献</h1>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/zh-cn/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal">En</span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/zh-cn/index.html" target="_self">首页</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">文档</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/blog/index.html" target="_self">博客</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/community/index.html" target="_self">社区</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>文档</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Fescar</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>概述<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">什么是 Fescar</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/terminology.html" target="_self">术语表</a></li></ul></li><li style="height:144px;overflow:hidden" class="menu-item menu-item-level-2"><span>设计原理<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/fescar_at.html" target="_self">Fescar AT 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/fescar_tcc.html" target="_self">Fescar TCC 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/fescar_mertics.html" target="_self">Metrics设计</a></li></ul></li><li style="height:216px;overflow:hidden" class="menu-item menu-item-level-2"><span>开发指南<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/spring.html" target="_self">Spring 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/api.html" target="_self">API 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/microservice.html" target="_self">微服务框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/ormframework.html" target="_self">ORM 框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/datasource.html" target="_self">数据源类型支持</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/ops/operation.html" target="_self">运维指南</a></li><li style="height:216px;overflow:hidden" class="menu-item menu-item-level-2"><span>开源共建<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/contribution.html" target="_self">社区贡献</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/activity.html" target="_self">有奖活动</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/question.html" target="_self">提交问题</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/roadmap.html" target="_self">社区规划</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/contact.html" target="_self">联系我们</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/faq.html" target="_self">常见问题</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>社区贡献</h1>
<p>TBD</p>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>愿景</h3><p>Seata 是一款阿里巴巴开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。</p></div><div class="col col-6"><dl><dt>文档</dt><dd><a href="/zh-cn/docs/overview/what_is_seata.html" target="_self">什么是 Seata</a></dd><dd><a href="/zh-cn/docs/quickstart.html" target="_self">快速开始</a></dd></dl></div><div class="col col-6"><dl><dt>资源</dt><dd><a href="/zh-cn/blog/index.html" target="_self">博客</a></dd><dd><a href="/zh-cn/community/index.html" target="_self">社区</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Seata</span></div></div></footer></div></div>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>愿景</h3><p>Fescar 是一款阿里巴巴开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。</p></div><div class="col col-6"><dl><dt>文档</dt><dd><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">什么是 Fescar</a></dd><dd><a href="/zh-cn/docs/quickstart.html" target="_self">快速开始</a></dd></dl></div><div class="col col-6"><dl><dt>资源</dt><dd><a href="/zh-cn/blog/index.html" target="_self">博客</a></dd><dd><a href="/zh-cn/community/index.html" target="_self">社区</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Fescar</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>

View File

@ -1,6 +1,6 @@
{
"filename": "contribution.md",
"__html": "<h1>社区贡献</h1>\n<p>TBD</p>\n",
"link": "\\zh-cn\\docs\\community\\contribution.html",
"link": "/zh-cn/docs/community/contribution.html",
"meta": {}
}

View File

@ -12,9 +12,9 @@
<link rel="stylesheet" href="/build/documentation.css" />
</head>
<body>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/zh-cn/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal">En</span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/zh-cn/index.html" target="_self">首页</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/zh-cn/docs/overview/what_is_seata.html" target="_self">文档</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/blog/index.html" target="_self">博客</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/community/index.html" target="_self">社区</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>文档</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Seata</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>概述<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/what_is_seata.html" target="_self">什么是 Seata</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/terminology.html" target="_self">术语表</a></li></ul></li><li style="height:144px;overflow:hidden" class="menu-item menu-item-level-2"><span>设计原理<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/seata_at.html" target="_self">Seata AT 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/seata_tcc.html" target="_self">Seata TCC 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/seata_mertics.html" target="_self">Metrics设计</a></li></ul></li><li style="height:216px;overflow:hidden" class="menu-item menu-item-level-2"><span>开发指南<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/spring.html" target="_self">Spring 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/api.html" target="_self">API 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/microservice.html" target="_self">微服务框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/ormframework.html" target="_self">ORM 框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/datasource.html" target="_self">数据源类型支持</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/ops/operation.html" target="_self">运维指南</a></li><li style="height:216px;overflow:hidden" class="menu-item menu-item-level-2"><span>开源共建<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/contribution.html" target="_self">社区贡献</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/activity.html" target="_self">有奖活动</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/question.html" target="_self">提交问题</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/roadmap.html" target="_self">社区规划</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/contact.html" target="_self">联系我们</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/faq.html" target="_self">常见问题</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>提交问题</h1>
<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/zh-cn/index.html"><img class="logo" src="https://img.alicdn.com/tfs/TB1t3pWJCzqK1RjSZFjXXblCFXa-246-64.png"/></a><span class="language-switch language-switch-normal">En</span><div class="header-menu"><img class="header-menu-toggle" src="/img/system/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/zh-cn/index.html" target="_self">首页</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">文档</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/blog/index.html" target="_self">博客</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/community/index.html" target="_self">社区</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>文档</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>Fescar</span><ul><li style="height:108px;overflow:hidden" class="menu-item menu-item-level-2"><span>概述<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">什么是 Fescar</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/overview/terminology.html" target="_self">术语表</a></li></ul></li><li style="height:144px;overflow:hidden" class="menu-item menu-item-level-2"><span>设计原理<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/fescar_at.html" target="_self">Fescar AT 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/fescar_tcc.html" target="_self">Fescar TCC 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/architecture/fescar_mertics.html" target="_self">Metrics设计</a></li></ul></li><li style="height:216px;overflow:hidden" class="menu-item menu-item-level-2"><span>开发指南<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/spring.html" target="_self">Spring 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/api.html" target="_self">API 支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/microservice.html" target="_self">微服务框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/ormframework.html" target="_self">ORM 框架支持</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/quickstart/datasource.html" target="_self">数据源类型支持</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/ops/operation.html" target="_self">运维指南</a></li><li style="height:216px;overflow:hidden" class="menu-item menu-item-level-2"><span>开源共建<img style="transform:rotate(0deg)" class="menu-toggle" src="/img/system/arrow_down.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/contribution.html" target="_self">社区贡献</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/activity.html" target="_self">有奖活动</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/question.html" target="_self">提交问题</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/roadmap.html" target="_self">社区规划</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/community/contact.html" target="_self">联系我们</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/faq.html" target="_self">常见问题</a></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>提交问题</h1>
<p>TBD</p>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>愿景</h3><p>Seata 是一款阿里巴巴开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。</p></div><div class="col col-6"><dl><dt>文档</dt><dd><a href="/zh-cn/docs/overview/what_is_seata.html" target="_self">什么是 Seata</a></dd><dd><a href="/zh-cn/docs/quickstart.html" target="_self">快速开始</a></dd></dl></div><div class="col col-6"><dl><dt>资源</dt><dd><a href="/zh-cn/blog/index.html" target="_self">博客</a></dd><dd><a href="/zh-cn/community/index.html" target="_self">社区</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Seata</span></div></div></footer></div></div>
</div></section><footer class="footer-container"><div class="footer-body"><img src="https://img.alicdn.com/tfs/TB1VohYJwHqK1RjSZFgXXa7JXXa-278-72.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>愿景</h3><p>Fescar 是一款阿里巴巴开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。</p></div><div class="col col-6"><dl><dt>文档</dt><dd><a href="/zh-cn/docs/overview/what_is_fescar.html" target="_self">什么是 Fescar</a></dd><dd><a href="/zh-cn/docs/quickstart.html" target="_self">快速开始</a></dd></dl></div><div class="col col-6"><dl><dt>资源</dt><dd><a href="/zh-cn/blog/index.html" target="_self">博客</a></dd><dd><a href="/zh-cn/community/index.html" target="_self">社区</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Fescar</span></div></div></footer></div></div>
<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
<script>

View File

@ -1,6 +1,6 @@
{
"filename": "question.md",
"__html": "<h1>提交问题</h1>\n<p>TBD</p>\n",
"link": "\\zh-cn\\docs\\community\\question.html",
"link": "/zh-cn/docs/community/question.html",
"meta": {}
}

Some files were not shown because too many files have changed in this diff Show More