📃
Tech White Papers
  • 📃White Papers
  • 🪶Apache
    • Kafka (EN)
      • Kafka Connect
      • Kafka Streams
      • ksqlDB
    • Ignite (TR)
      • Clustering
        • Baseline Topology
      • Thin Clients
      • Data Modeling
        • Data Partitioning
        • Affinity Colocation
      • Memory Architecture
      • Persistence
        • External Storage
        • Swapping
        • Snapshot
        • Disk Compression
        • Persistence Tuning
        • Change Data Capture
      • Cluster Snapshots
      • Data Rebalancing
      • Data Streaming
      • Using Key-Value API
        • Basic Cache Operations
        • Working With Binary Objects
      • Performing Transactions
      • Working with SQL
        • Understanding Schemas
        • Defining Indexes
        • Distributed Joins
      • Distributed Computing
      • Machine Learning
      • Using Continuous Queries
      • Using Ignite Messaging
      • .NET Specific
        • LINQ
        • Serialization
      • Working With Events
        • Events
      • Performance and Troubleshooting
        • Generic Performance Tips
        • Memory and JVM Tuning
        • Persistence Tuning
        • SQL Performance Tuning
        • Thread Pools Tuning
    • Pulsar (TR)
  • 📜Data
    • ClickHouse (TR)
    • QuestDB (TR)
  • Comparison
    • Pulsar vs Kafka
    • ClickHouse vs QuestDB
  • Architectural
    • Microservices
      • Design Principles
      • Design Patterns
Powered by GitBook
On this page
  • System Pool
  • Queries Pool
  • Public Pool
  • Service Pool
  • Striped Pool
  • Data Streamer Pool
  • Snapshot Pool
  • Creating Custom Thread Pool

Was this helpful?

  1. Apache
  2. Ignite (TR)
  3. Performance and Troubleshooting

Thread Pools Tuning

03/02/2023

Ignite, farklı amaçlar için kullanılan çeşitli thread poolları oluşturur ve sürdürür. Bu bölümde, daha yaygın olan internal poollardan bazılarını listeliyoruz ve nasıl özel bir pool oluşturabileceğinizi gösteriyoruz.

System Pool

System pool, SQL ve sorgu havuzuna giden diğer bazı sorgu türleri dışında cachele ilgili tüm işlemleri gerçekleştirir. Ayrıca bu havuz, compute görevlerinin iptal işlemlerini işlemekten sorumludur.

Varsayılan havuz boyutu max(8, toplam çekirdek sayısı). Havuz boyutunu değiştirmek için programlama dilinizden IgniteConfiguration.setSystemThreadPoolSize(…) veya benzer bir API kullanın.

Queries Pool

Queries pool, cluster genelinde gönderilen ve yürütülen tüm SQL, Scan ve SPI sorgularıyla ilgilenir.

Varsayılan havuz boyutu max(8, toplam çekirdek sayısı). Havuz boyutunu değiştirmek için programlama dilinizden IgniteConfiguration.setQueryThreadPoolSize(…) veya benzer bir API kullanın.

Public Pool

Public pool, Compute Grid'in iş gücüdür. Tüm hesaplamalar bu havuz tarafından alınır ve işlenir.

Varsayılan havuz boyutu max(8, toplam çekirdek sayısı). Havuz boyutunu değiştirmek için programlama dilinizden IgniteConfiguration.setPublicThreadPoolSize(…) veya benzer bir API kullanın.

Service Pool

Service Grid çağrıları, hizmetlerin thread havuzuna gider. Service ve Compute bileşenleri için ayrılmış havuzlara sahip olmak, bir service implementasyonu bir hesaplamayı çağırmak istediğinde veya tam tersi olduğunda thread pool starvation ve deadlockları önlememize olanak tanır.

Varsayılan havuz boyutu max(8, toplam çekirdek sayısı). Havuz boyutunu değiştirmek için programlama dilinizden IgniteConfiguration.setServiceThreadPoolSize(…) veya benzer bir API kullanın.

Striped Pool

Striped pool, işlemlerin yürütülmesini kaynaklar için birbiriyle rekabet etmeyen birden çok şerite yayarak temel cache işlemlerini ve transactionlarını hızlandırmaya yardımcı olur.

Varsayılan havuz boyutu max(8, toplam çekirdek sayısı). Havuz boyutunu değiştirmek için programlama dilinizden IgniteConfiguration.setStripedPoolSize(…) veya benzer bir API kullanın.

Data Streamer Pool

Data streamer pool, IgniteDataStreamer'dan ve dahili olarak IgniteDataStreamer kullanan çeşitli streaming adaptörlerinden gelen tüm mesajları ve istekleri işler.

Varsayılan havuz boyutu max(8, toplam çekirdek sayısı). Havuz boyutunu değiştirmek için programlama dilinizden IgniteConfiguration.setDataStreamerThreadPoolSize(…) veya benzer bir API kullanın.

Snapshot Pool

Snapshot pool, Apache Ignite anlık görüntülerini alma veya geri yükleme ile ilgili tüm cluster işlemlerini işlemek için kullanılır.

Varsayılan havuz boyutu 4'tür (bkz. IgniteConfiguration.DFLT_SNAPSHOT_THREAD_POOL_SIZE). Havuz boyutunu değiştirmek için IgniteConfiguration.setSnapshotThreadPoolSize(…) öğesini kullanın.

Creating Custom Thread Pool

Compute görevleri için özel bir thread pool yapılandırmak mümkündür. Deadlocklardan eşzamanlı olarak kaçınarak bir compute görevini(task) diğerinden yürütmek istiyorsanız bu kullanışlıdır. Bunu garanti etmek için, iç içe geçmiş bir görevin, ebeveynin görevler thread poolundan ayrı bir thread poolunda yürütüldüğünden emin olmanız gerekir.

IgniteConfiguration'da özel bir pool tanımlanmıştır ve benzersiz bir ada sahip olmalıdır:

<bean class="org.apache.ignite.configuration.IgniteConfiguration">

    <property name="executorConfiguration">
        <list>
            <bean class="org.apache.ignite.configuration.ExecutorConfiguration">
                <property name="name" value="myPool"/>
                <property name="size" value="16"/>
            </bean>
        </list>
    </property>

</bean>

Şimdi, yukarıda tanımlanan myPool'dan bir threadde aşağıdaki hesaplama görevini yürütmek istediğinizi varsayalım:

public class InnerRunnable implements IgniteRunnable {
    @Override
    public void run() {
        System.out.println("Hello from inner runnable!");
    }
}

Bunu yapmak için, aşağıda gösterildiği gibi görevi hemen üst görevden yürütecek olan IgniteCompute.withExecutor()'u kullanın:

public class OuterRunnable implements IgniteRunnable {
    @IgniteInstanceResource
    private Ignite ignite;

    @Override
    public void run() {
        // Synchronously execute InnerRunnable in a custom executor.
        ignite.compute().withExecutor("myPool").run(new InnerRunnable());
        System.out.println("outer runnable is executed");
    }
}

Ana görevin yürütmesi şu şekilde tetiklenebilir ve bu senaryoda public pool tarafından yürütülür:

ignite.compute().run(new OuterRunnable());

Bir uygulama, node’un yapılandırmasında tanımlanmayan custom bir poolda bir hesaplama görevi yürütmeye çalışırsa, loglara özel bir uyarı mesajı yazdırılır ve görev, yürütülmek üzere public pool tarafından alınır.

PreviousSQL Performance TuningNextPulsar (TR)

Last updated 2 years ago

Was this helpful?

🪶