Konfigurasikan penggunaan kembali koneksi untuk DashScope SDK
Tanpa penggunaan kembali koneksi, setiap panggilan API membuka koneksi TCP baru dan menjalankan proses jabat tangan TLS, yang menambah latensi. Dalam skenario konkurensi tinggi, overhead ini dapat menyebabkan timeout dan pemborosan sumber daya. Penggunaan kembali koneksi menghilangkan penyiapan berulang, sehingga mengurangi latensi dan konsumsi sumber daya.
DashScope SDK mendukung penggunaan kembali koneksi baik di Java maupun Python:
Java SDK: Kolam koneksi bawaan diaktifkan secara default. Konfigurasikan parameter seperti jumlah koneksi maksimum dan durasi timeout.
Python SDK: Aktifkan penggunaan kembali koneksi dengan meneruskan Session kustom. SDK ini mendukung panggilan sinkron maupun asinkron.
Java SDK menyertakan kolam koneksi bawaan yang diaktifkan secara default. Sesuaikan jumlah koneksi maksimum dan pengaturan timeout untuk mengoptimalkan sesuai beban kerja Anda.
Jumlah maksimum permintaan konkuren di semua host (batas global).
32
requests
maximumAsyncRequestsPerHost
Jumlah maksimum permintaan konkuren per host.
32
requests
Batasan parameter:
maximumAsyncRequests harus ≤ connectionPoolSize; jika tidak, permintaan dapat hang.
maximumAsyncRequestsPerHost harus ≤ maximumAsyncRequests.
Panduan penyetelan:
connectTimeout: Dalam skenario latensi rendah, atur timeout lebih pendek untuk mengurangi waktu tunggu.
connectionIdleTimeout: Dalam skenario konkurensi tinggi, perpanjang timeout idle untuk menghindari pembuatan koneksi berulang dan mengurangi penggunaan sumber daya.
connectionPoolSize: Dalam skenario konkurensi tinggi, jumlah koneksi yang terlalu sedikit menyebabkan blocking, timeout, dan koneksi ulang berulang (penggunaan sumber daya lebih tinggi). Sebaliknya, jumlah koneksi yang terlalu banyak membebani server. Seimbangkan jumlah koneksi berdasarkan beban kerja Anda.
Contoh berikut mengonfigurasi parameter kolam koneksi (timeout, jumlah koneksi maksimum) dan memanggil layanan model. Sesuaikan parameter tersebut untuk mengoptimalkan konkurensi dan penggunaan sumber daya.
Copy
// Disarankan versi DashScope SDK >= 2.12.0import java.time.Duration;import java.util.Arrays;import com.alibaba.dashscope.aigc.generation.Generation;import com.alibaba.dashscope.aigc.generation.GenerationParam;import com.alibaba.dashscope.aigc.generation.GenerationResult;import com.alibaba.dashscope.common.Message;import com.alibaba.dashscope.common.Role;import com.alibaba.dashscope.exception.ApiException;import com.alibaba.dashscope.exception.InputRequiredException;import com.alibaba.dashscope.exception.NoApiKeyException;import com.alibaba.dashscope.protocol.ConnectionConfigurations;import com.alibaba.dashscope.protocol.Protocol;import com.alibaba.dashscope.utils.Constants;public class Main { public static GenerationResult callWithMessage() throws ApiException, NoApiKeyException, InputRequiredException { // Ini adalah URL wilayah Singapura. Ganti WorkspaceId dengan ID ruang kerja aktual Anda. URL berbeda tiap wilayah. Generation gen = new Generation(Protocol.HTTP.getValue(), "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1"); Message systemMsg = Message.builder() .role(Role.SYSTEM.getValue()) .content("You are a helpful assistant.") .build(); Message userMsg = Message.builder() .role(Role.USER.getValue()) .content("Who are you?") .build(); GenerationParam param = GenerationParam.builder() // Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key // Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx") .apiKey(System.getenv("DASHSCOPE_API_KEY")) // Contoh ini menggunakan qwen-plus. Ubah nama model sesuai kebutuhan. Daftar model: https://www.alibabacloud.com/help/en/model-studio/getting-started/models .model("qwen-plus") .messages(Arrays.asList(systemMsg, userMsg)) .resultFormat(GenerationParam.ResultFormat.MESSAGE) .build(); System.out.println(userMsg.getContent()); return gen.call(param); } public static void main(String[] args) { // Konfigurasi kolam koneksi Constants.connectionConfigurations = ConnectionConfigurations.builder() .connectTimeout(Duration.ofSeconds(10)) // Timeout untuk membentuk koneksi, default 120s .readTimeout(Duration.ofSeconds(300)) // Timeout untuk membaca data, default 300s .writeTimeout(Duration.ofSeconds(60)) // Timeout untuk menulis data, default 60s .connectionIdleTimeout(Duration.ofSeconds(300)) // Timeout untuk koneksi idle dalam kolam koneksi, default 300s .connectionPoolSize(256) // Jumlah koneksi maksimum dalam kolam koneksi, default 32 .maximumAsyncRequests(256) // Jumlah maksimum permintaan konkuren, default 32 .maximumAsyncRequestsPerHost(256) // Jumlah maksimum permintaan konkuren per host, default 32 .build(); try { GenerationResult result = callWithMessage(); System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent()); } catch (ApiException | NoApiKeyException | InputRequiredException e) { // Gunakan framework logging untuk mencatat informasi exception System.err.println("Terjadi kesalahan saat memanggil layanan generasi: " + e.getMessage()); } System.exit(0); }}
Python SDK mendukung penggunaan kembali koneksi dengan meneruskan Session kustom. SDK ini mendukung dua metode pemanggilan: HTTP asinkron (berbasis korutin) dan HTTP sinkron.
Untuk skenario asinkron, gunakan aiohttp.ClientSession dengan aiohttp.TCPConnector untuk mengaktifkan penggunaan kembali koneksi. TCPConnector mendukung konfigurasi parameter seperti batas koneksi:
Parameter
Description
Default value
Notes
limit
Batas total koneksi (semua host).
100
Dalam skenario konkurensi tinggi, tingkatkan nilai ini untuk meningkatkan konkurensi.
Contoh berikut mengonfigurasi penggunaan kembali koneksi dan memanggil layanan model secara asinkron:
Copy
import asyncioimport aiohttpimport sslimport certififrom dashscope import AioGenerationimport dashscopeimport osasync def main(): # Ini adalah URL wilayah Singapura. Ganti WorkspaceId dengan ID ruang kerja aktual Anda. URL berbeda tiap wilayah. dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1' # Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key # Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: dashscope.api_key = "sk-xxx" dashscope.api_key = os.getenv("DASHSCOPE_API_KEY") # Konfigurasi parameter koneksi connector = aiohttp.TCPConnector( limit=100, # Batas total koneksi limit_per_host=30, # Batas koneksi per host ssl=ssl.create_default_context(cafile=certifi.where()), ) # Buat Session kustom dan teruskan ke metode panggilan async with aiohttp.ClientSession(connector=connector) as session: response = await AioGeneration.call( model='qwen-plus', prompt='Hello, please introduce yourself', session=session, # Teruskan Session kustom ) print(response)asyncio.run(main())
Untuk skenario sinkron, gunakan requests.Session untuk mengaktifkan penggunaan kembali koneksi. Beberapa permintaan dalam Session yang sama menggunakan kembali koneksi TCP dasar, sehingga menghindari overhead pembentukan koneksi berulang.
Contoh berikut mengonfigurasi penggunaan kembali koneksi dan memanggil layanan model secara sinkron:
Copy
import requestsfrom dashscope import Generationimport dashscopeimport os# Ini adalah URL wilayah Singapura. Ganti WorkspaceId dengan ID ruang kerja aktual Anda. URL berbeda tiap wilayah.dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'# Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key# Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: dashscope.api_key = "sk-xxx"dashscope.api_key = os.getenv("DASHSCOPE_API_KEY")# Gunakan pernyataan with untuk memastikan Session ditutup dengan benarwith requests.Session() as session: response = Generation.call( model='qwen-plus', prompt='Hello', session=session # Teruskan Session kustom ) print(response)
Contoh kode: beberapa panggilan dengan Session bersama
Untuk menggunakan kembali Session di beberapa panggilan:
Copy
import requestsfrom dashscope import Generationimport dashscopeimport os# Ini adalah URL wilayah Singapura. Ganti WorkspaceId dengan ID ruang kerja aktual Anda. URL berbeda tiap wilayah.dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'# Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key# Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: dashscope.api_key = "sk-xxx"dashscope.api_key = os.getenv("DASHSCOPE_API_KEY")# Buat objek Sessionsession = requests.Session()try: # Gunakan kembali Session yang sama untuk beberapa panggilan response1 = Generation.call( model='qwen-plus', prompt='Hello', session=session ) print(response1) response2 = Generation.call( model='qwen-plus', prompt='Introduce yourself', session=session ) print(response2)finally: # Pastikan Session ditutup dengan benar session.close()
Java SDK: Atur connectionPoolSize dan maximumAsyncRequests sesuai beban kerja Anda. Seimbangkan jumlah koneksi: terlalu sedikit menyebabkan blocking, terlalu banyak membebani server.
Python SDK: Gunakan pernyataan with untuk mengelola siklus hidup Session dan memastikan pembersihan sumber daya yang tepat.
Pilih metode yang tepat: Gunakan panggilan asinkron untuk aplikasi asinkron (asyncio, FastAPI). Gunakan panggilan sinkron untuk aplikasi sinkron tradisional.