Bagikan melalui


Penyeimbangan Beban

Salah satu cara untuk meningkatkan kapasitas aplikasi Windows Communication Foundation (WCF) adalah dengan menskalakannya dengan menyebarkannya ke farm server yang seimbang. Aplikasi WCF dapat diseimbangkan bebannya menggunakan teknik penyeimbangan beban standar, termasuk penyeimbang beban perangkat lunak seperti Windows Network Load Balancing serta peralatan penyeimbangan beban berbasis perangkat keras.

Bagian berikut membahas pertimbangan untuk penyeimbangan beban aplikasi WCF yang dibangun menggunakan berbagai pengikatan yang disediakan sistem.

Penyeimbangan Beban dengan Pengikatan HTTP Dasar

Dari perspektif penyeimbangan beban, aplikasi WCF yang berkomunikasi menggunakan BasicHttpBinding tidak berbeda dari jenis lalu lintas jaringan HTTP umum lainnya (konten HTML statis, halaman ASP.NET, atau Layanan Web ASMX). Saluran WCF yang menggunakan pengikatan ini secara inheren tanpa status, dan mengakhiri koneksinya ketika saluran ditutup. Dengan demikian, BasicHttpBinding bekerja dengan baik dengan teknik penyeimbangan beban HTTP yang ada.

Secara default, BasicHttpBinding mengirim header HTTP koneksi dalam pesan dengan nilai Keep-Alive, yang memungkinkan klien untuk membuat koneksi persisten ke layanan yang mendukungnya. Konfigurasi ini menawarkan throughput yang ditingkatkan karena koneksi yang dibuat sebelumnya dapat digunakan kembali untuk mengirim pesan berikutnya ke server yang sama. Namun, penggunaan kembali koneksi dapat menyebabkan klien menjadi sangat terkait dengan server tertentu dalam farm yang seimbang, yang mengurangi efektivitas penyeimbangan beban round-robin. Jika perilaku ini tidak diinginkan, Keep-Alive HTTP dapat dinonaktifkan pada server menggunakan properti KeepAliveEnabled dengan CustomBinding atau Binding yang ditentukan pengguna. Contoh berikut menunjukkan cara untuk melakukan hal ini menggunakan konfigurasi.

<?xml version="1.0" encoding="utf-8" ?>  
<configuration>  
  
 <system.serviceModel>  
  <services>  
   <service
     name="Microsoft.ServiceModel.Samples.CalculatorService"  
     behaviorConfiguration="CalculatorServiceBehavior">  
     <host>  
      <baseAddresses>  
       <add baseAddress="http://localhost:8000/servicemodelsamples/service"/>  
      </baseAddresses>  
     </host>  
    <!-- configure http endpoint, use base address provided by host  
         And the customBinding -->  
     <endpoint address=""  
           binding="customBinding"  
           bindingConfiguration="HttpBinding"
           contract="Microsoft.ServiceModel.Samples.ICalculator" />  
   </service>  
  </services>  
  
  <bindings>  
    <customBinding>  
  
    <!-- Configure a CustomBinding that disables keepAliveEnabled-->  
      <binding name="HttpBinding" keepAliveEnabled="False"/>  
  
    </customBinding>  
  </bindings>  
 </system.serviceModel>  
</configuration>  

Menggunakan konfigurasi yang disederhanakan yang diperkenalkan di .NET Framework 4, perilaku yang sama dapat dicapai menggunakan konfigurasi yang disederhanakan berikut.

<?xml version="1.0" encoding="utf-8" ?>  
<configuration>  
 <system.serviceModel>  
    <protocolMapping>  
      <add scheme="http" binding="customBinding" />  
    </protocolMapping>  
    <bindings>  
      <customBinding>  
  
      <!-- Configure a CustomBinding that disables keepAliveEnabled-->  
        <binding keepAliveEnabled="False"/>  
  
      </customBinding>  
    </bindings>  
 </system.serviceModel>  
</configuration>  

Untuk informasi selengkapnya tentang titik akhir, pengikatan, dan perilaku default, lihat Konfigurasi Sederhana dan Konfigurasi Sederhana untuk Layanan WCF.

Penyeimbangan Beban dengan Pengikatan WSHttp dan Pengikatan WSDualHttp

Baik WSHttpBinding dan WSDualHttpBinding dapat diseimbangkan bebannya menggunakan teknik penyeimbangan beban HTTP asalkan beberapa modifikasi dilakukan pada konfigurasi pengikatan default.

  • Nonaktifkan Pembentukan Konteks Keamanan atau gunakan sesi keamanan stateful. Pembentukan Konteks Keamanan dapat dinonaktifkan dengan mengatur properti EstablishSecurityContext pada WSHttpBinding ke false. Jika Anda menggunakan WSDualHttpBinding atau sesi keamanan diperlukan, dimungkinkan untuk menggunakan sesi keamanan stateful seperti yang dijelaskan dalam Sesi Aman. Sesi keamanan stateful memungkinkan layanan tetap tanpa status, karena semua status untuk sesi keamanan ditransmisikan dengan setiap permintaan sebagai bagian dari token keamanan perlindungan. Untuk mengaktifkan sesi keamanan stateful, Anda harus menggunakan CustomBinding atau Binding yang ditentukan pengguna, karena pengaturan konfigurasi yang diperlukan tidak terekspos pada WSHttpBinding dan WSDualHttpBinding yang disediakan sistem.

  • Jika Anda menonaktifkan Pembentukan Konteks Keamanan, Anda juga perlu menonaktifkan Negosiasi Kredensial Layanan. Untuk menonaktifkannya, atur properti NegotiateServiceCredential pada WSHttpBinding ke false. Untuk menonaktifkan Negosiasi Kredensial Layanan, Anda mungkin perlu secara eksplisit menentukan identitas titik akhir pada klien.

  • Jangan gunakan sesi yang dapat diandalkan. Fitur ini nonaktif secara default.

Penyeimbangan Beban Pengikatan Net.TCP

NetTcpBinding dapat diseimbangkan bebannya menggunakan teknik penyeimbangan beban lapisan IP. Namun, NetTcpBinding mengumpulkan koneksi TCP secara default untuk mengurangi latensi koneksi. Ini adalah pengoptimalan yang mengganggu mekanisme dasar penyeimbangan beban. Nilai konfigurasi utama untuk mengoptimalkan NetTcpBinding adalah batas waktu sewa, yang merupakan bagian dari Pengaturan Kumpulan Koneksi. Pengumpulan koneksi menyebabkan koneksi klien dikaitkan dengan server tertentu dalam farm. Ketika masa pakai koneksi tersebut meningkat (faktor yang dikendalikan oleh pengaturan batas waktu sewa), distribusi beban di berbagai server di farm menjadi tidak seimbang. Akibatnya, waktu panggilan rata-rata meningkat. Jadi, saat menggunakan NetTcpBinding dalam skenario beban yang seimbang, pertimbangkan untuk mengurangi batas waktu sewa default yang digunakan oleh pengikatan. Batas waktu sewa 30 detik adalah titik awal yang wajar untuk skenario beban yang seimbang, meskipun nilai optimalnya bergantung pada aplikasi. Untuk informasi selengkapnya tentang batas waktu sewa saluran dan kuota transportasi lainnya, lihat Kuota Transportasi.

Untuk performa terbaik dalam skenario beban yang seimbang, pertimbangkan untuk menggunakan NetTcpSecurity (baik Transport atau TransportWithMessageCredential).

Lihat juga