Akka için iyi kullanım durumu [kapalı]


605

Akka çerçevesi (Java / Scala servis platformu) hakkında çok çılgın duydum , ancak şimdiye kadar iyi olacağına dair birçok gerçek durum örneği görmedim. Bu yüzden geliştiricilerin başarılı bir şekilde kullandığı şeyleri duymakla ilgilenirim.

Yalnızca bir sınırlama: lütfen sohbet sunucusu yazma durumunu dahil etmeyin. (neden? bu çok benzer şeylere örnek olarak kullanıldığından)


10
Sorunla başlamak ve bunun için bir çözüm bulmak, bir çözüm bulup uygulamak için bir sorun aramaktan daha kolay değil mi? Benim tahminim RMI kullanarak, Akka ve aktörleri için kod yazmak çok daha kolay / basit görünüyor.
Kennet

67
Evet, çözmek için özel bir sorunum olsaydı. Hiçbir şekilde "Akka'yı kullanmak için bir bahane" aramıyorum ama biraz daha fazla şey öğrenmekle ilgileniyorum. Bu, gelecekteki sorunların da çözülmesine yardımcı olabilir, ancak çoğunlukla devam eden öğrenme süreci içindir.
StaxMan

İlgili soru var ancak mevcut uygulama için AKKA'nın uygulanması + bazı kullanım durumları hakkında: stackoverflow.com/questions/16595685/…
ses

2
Akka, JMS veya MQ tarzı dağıtılmış mesaj kuyruğu sistemi üzerinde daha iyi bir çözümdür. Son zamanlarda aynı soruyu soran kendim için bunu anlamanın en iyi yolu: "Nasıl kullanılacağını anlayabiliyorum ve nerede kullanabileceğimi anlıyorum, ama bunun gerçek bir avantaj sağlayacağı yeri göremiyorum". Akka'nın arkasındaki temel tasarım varsayımları, özellikle işlem izolasyonu, kilitsiz tasarım ve yeniden deneme / arıza işleme ile ilgili olarak JMS / MQ'nun arkasındaki varsayımlardan çok daha iyidir. İkinci olarak, API JMS / MQ araçlarından çok daha zariftir.
user2684301

2
@ user2684301 hmmh. Bu cevabı biraz elmalardan portakallara haksız buldum. MQ'lar (mantıksal olarak) Akka'dan çok daha az basit yapı taşlarıdır ve bunları yan yana karşılaştırmam. Ama sanırım bunu "deklare olarak yazılmış JMS kullanılarak oluşturulan dağıtılmış sistemlere kıyasla" olarak okursam daha mantıklı olurdu.
StaxMan

Yanıtlar:


321

Şimdiye kadar iki gerçek projede başarıyla kullandım. her ikisi de gerçek zamanlıya yakın trafik bilgi alanında (otoyollardaki otomobillerde olduğu gibi trafik), birkaç düğüm üzerinde dağıtılmış, birkaç taraf arasındaki mesajları entegre ediyor, güvenilir arka uç sistemleri. Henüz istemcilere özellikleri vermek için özgür değilim, Tamam aldığımda belki referans olarak eklenebilir.

Akka, 0.7 sürümündeyken başlamamıza rağmen, bu projeleri gerçekten üstlendi. (Bu arada scala kullanıyoruz)

En büyük avantajlardan biri, neredeyse hiçbir kazan plakası olmayan aktörlerden ve mesajlardan bir sistem oluşturabilme kolaylığıdır, elle yuvarlanmış diş çekme işleminin tüm karmaşıklıkları olmadan son derece iyi ölçeklenir ve nesneler arasında neredeyse ücretsiz olarak asenkron mesaj alırsınız.

Her türlü asenkron mesaj yönetimini modellemek çok iyidir. Bu tarzda başka herhangi bir tarzdan (web) herhangi bir hizmet sistemi yazmayı tercih ederim. (Hiç JAX-WS ile eşzamansız bir web hizmeti (sunucu tarafı) yazmaya çalıştınız mı? Bu yüzden, bileşenlerinden birine asmak istemeyen herhangi bir sistem söyleyebilirim, çünkü her şey senkronize yöntemler kullanılarak dolaylı olarak çağrılır ve bir bileşen bir şeye kilitlenir. Çok kararlı ve başarısızlığa karşı let-it-crash + süpervizör çözümü gerçekten iyi çalışıyor. Her şeyin programlı olarak kurulumu kolaydır ve birim testi zor değildir.

Sonra mükemmel eklenti modülleri var. Deve modülü gerçekten Akka'ya takılır ve yapılandırılabilir uç noktalarla asenkron servislerin bu kadar kolay geliştirilmesini sağlar.

Çerçeveden çok memnunum ve inşa ettiğimiz bağlantılı sistemler için bir standart haline geliyor.


14
Sizce iletiyi iletmek için bir mesajlaşma arka ucu (örn. ActiveMQ) kullanmaya kıyasla bu yaklaşımın faydası nedir?
magiconair

27
MQ ürünleri gerçekten farklı bir kullanım içindir. farklı garantiler ve çok farklı performans. MQ ürünleri çok fazla kuruluma ihtiyaç duyar, böyle bir üründeki kuyrukları nesneleri kullandığınız gibi kullanmazsınız. Aktörler akka'daki birinci sınıf vatandaşlardır, onları istediğiniz gibi kullanırsınız, nesneleri nasıl kullanacağınıza benzer şekilde, bu nedenle kurulumda olduğu gibi programlama modelinizde de çok daha az ek yük vardır. Aktörler için kullanacağınız bir şey olan bir sistemin 'iç bileşenlerini' oluşturmak için değil, diğer harici sistemlerle entegre etmek için daha fazla kullanacağınız MQ ürünleri.
Raymond Roestenburg

26
DBP örnek olay incelemesi için yeni URL downloads.typesafe.com/website/casestudies/…
Bas

2
@RaymondRoestenburg re: MQ sistemlerinin ve alternatiflerinin oluşturulması. RabbitMQ, örneğin, inşa edilmiştir üzerinde bir aktör temelli programlama dili, Erlang. Bu, aktör ve MQ arasındaki ilişkiyi (ve ayrımını) düşünmenin bir yoludur. Bu arada Apache Spark ne işçi, ne sıra Aktör tabanlıdır, AMA Akka ile kullanılabilir: Typesafe, Spark Streaming'ın Akka ile nasıl kullanılacağını gösterir .
driftcatcher

6
@RaymondRoestenburg Aktör modelinin olduğu gibi spagetti benzeri yapıyı desteklediğini belirtmeyi ihmal ettiniz. Yazdığınız "Akka Eylemde" kitabı bu "özellik" için en iyi gösteri. Kod örnekleri oldukça temel hikayelerle ilgilidir. Ancak iş akışını anlamak ve koddan takip etmek çok zordur. Bununla ilgili bir sorun, Akka kodunun iş mantığınızın her yerinde hayal edebileceğiniz en müdahaleci bir şekilde KESİNLİKLE olacağıdır. Diğer aktör olmayan çerçevelerden çok daha fazlası. Temel bir iş akışını farklı ayrı bölümlere ayırmadan yazmak imkansızdır.
mest

222

Feragatname: Akka'nın PO'suyum

Akıl yürütmek ve düzeltmek (aktörler, aracılar, veri akışı eşzamanlılığı) ve STM şeklinde eşzamanlılık kontrolü ile çok daha basit bir eşzamanlılık smorgasbord sunmanın yanı sıra.

Düşünebileceğiniz bazı kullanım örnekleri şunlardır:

  1. İşlem işleme (çevrimiçi oyun, finans, istatistik, bahis, sosyal medya, telekom, ...)
    • ölçek büyütme, ölçek büyütme, hata toleransı / HA
  2. Hizmet arka ucu (herhangi bir endüstri, herhangi bir uygulama)
    • hizmet REST, SABUN, kuyruklu yıldız vb
    • mesaj merkezi / entegrasyon katmanı gibi davran
    • ölçek büyütme, ölçek büyütme, hata toleransı / HA
  3. Ek bileşen eşzamanlılığı / paralellik (herhangi bir uygulama)
    • Doğru
    • Çalışması ve anlaması kolay
    • Kavanozları mevcut JVM projenize ekleyin (Scala, Java, Groovy veya JRuby kullanın)
  4. Toplu işleme (herhangi bir endüstri)
    • Toplu veri kaynakları ile bağlantı kurmak için deve entegrasyonu
    • Aktörler toplu iş yüklerini böler ve fetheder
  5. İletişim merkezi (telekom, web medya, mobil medya)
    • ölçek büyütme, ölçek büyütme, hata toleransı / HA
  6. Oyun sunucusu (çevrimiçi oyun, bahis)
    • ölçek büyütme, ölçek büyütme, hata toleransı / HA
  7. BI / veri madenciliği / genel amaçlı çıtırtı
    • ölçek büyütme, ölçek büyütme, hata toleransı / HA
  8. buraya güzel kullanım örnekleri ekleyin

10
Futures ve STM'nin faydalarını anlıyorum, ancak aktörler için iyi kullanım durumları bulamıyorum. Bir oyun veya bahis sunucusu için, yük dengeleyicinin arkasında Aktörlere karşı birden çok uygulama sunucusunu kullanmanın avantajı nedir?
Martin Konicek

8
@ViktorKlang POs! = Teknoloji Lideri. Birlikte çalışırlar, ancak farklı roller üstlenirler.
taylorcressy

79

Bunu nasıl kullandığımızın bir örneği, banka / kredi kartı işlemlerinin öncelikli kuyruğundadır. Bunlardan milyonlar var ve çalışmanın çabası girdi dizesi türüne bağlıdır. İşlem CHECK türünde ise çok az işleme sahibiz, ancak satış noktası ise meta verilerle (kategori, etiket, etiketler vb.) Birleştirme ve hizmetler (e-posta / sms uyarıları, dolandırıcılık tespiti, düşük fon dengesi, vb.). Giriş türüne dayanarak, işi yürütmek ve daha sonra işi gerçekleştirmek için gerekli olan çeşitli özelliklerden (mixins adı verilir) sınıflar oluştururuz. Tüm bu işler, farklı finans kurumlarından gerçek zamanlı modda aynı sıraya giriyor. Veriler temizlendikten sonra, kalıcılık, analitik için bir soket bağlantısına veya Lift kuyruklu yıldız aktörüne gönderilmek üzere farklı veri depolarına gönderilir. Çalışan aktörler, verileri olabildiğince hızlı bir şekilde işleyebilmemiz için işi sürekli olarak kendi kendini dengeliyor. Ayrıca ek hizmetler, kalıcılık modelleri ve kritik karar noktaları için.

JVM'den geçen Erlang OTP tarzı mesaj, mevcut kütüphanelerin ve uygulama sunucularının omuzlarında gerçek zamanlı sistemler geliştirmek için harika bir sistem oluşturur.

Akka geleneksel bir mesajda olduğu gibi mesaj geçişi yapmanızı sağlar ama hızlı! Ayrıca, çözümünüz için ihtiyacınız olan çok sayıda aktör havuzunu, uzak düğümü ve hata toleransını yönetmek için çerçeve içinde araçlar sunar.


1
Öyleyse, talep başına tek bir iş parçacığının iyi ölçeklenmeyeceği (bazı) uzun gecikme talepleri olduğunu söylemek doğru mu?
StaxMan

7
Genel olarak aktör programlamanın önemli kısmının mesaj akışı olduğunu düşünüyorum. Yan etkileri olmayan veri akışlarında kavramsallaştırmaya başladığınızda, düğüm başına mümkün olduğunca çok akış olmasını istiyorsunuz. İleti göndermeyen ve işlenmesi uzun süren yarı homojen işleriniz varsa, bu Yüksek Performanslı Bilgi İşlemden çok farklıdır. Bence aktör tabanlı bir Fibonacci uygulaması, neden aktörlerin kullanılacağını göstermediği için değil, sadece aktörlerin görevleri felç ettiğini gösteren çok sınırlayıcı bir örnek. Kullanım örnekleri için Olay odaklı mimariyi düşünün.
Wade Arnold

4
Olay güdümlü mimari, problemleri düşünmenin farklı bir yoludur. Akka'da kodlama yapmayı düşünüyorsanız Erlang OTP'yi iş başında manning'den okumaya değer. Akka'daki birçok yapı Erlang OTP'den etkileniyor ve kitap size Jonas Boner'ın neden akka api'yi yaptığı gibi ilkeler sunuyor. Akka, üzerinde durduğunuz büyük bir dağ! Eğer aktörleriniz devlet değişiklikleriyle ısrarcıysa, gerçekten 10k saniyede ikinci bir yazıya ihtiyacınız var
Wade Arnold

8
Wade, mesaj garantilerini nasıl ele alıyorsunuz? Eğer söz: (e-posta / sms uyarıları, dolandırıcılık tespiti, düşük fon dengesi, vb), bunların potansiyel olarak uzak aktörlere gönderildiğini varsayalım? Bu operasyonların gerçekten gerçekleşmesini nasıl sağlıyorsunuz? bir sahtekarlık uyarısı işlenirken düğüm başarısız olursa ne olur? Sonsuza dek gitti mi? Sonuçta onu temizleyen tutarlı bir sisteminiz var mı? Teşekkürler!
James

2
Güzel soru James. Acilen cevabın gerekli olmadığı bir sisteme uyduğu açıktır. Örneğin, kredi kartı faturalarını işleyebilirsiniz; hesaplamak; e-posta vb. gönderin. Yanıt gerektiğinde bu işlemlerin nasıl yapıldığını gerçekten merak ediyorum. Sonunda; dışarıdan bir talep yapılırsa (internet kullanıcısı; çağrı merkezinden temsilci vb.); bir cevap bekler. (Zaman uyumsuz olarak yürütülür) alt görevlerin yürütüldüğünden nasıl emin olabilirim; Bir xa işleminde cevap verebilir miyim?
Kaan Yy

44

Akka'yı REST çağrılarını eşzamansız olarak işlemek için kullanırız - eşzamansız web sunucusu (Netty tabanlı) ile birlikte, kullanıcı istek modeli başına geleneksel iş parçacığına kıyasla düğüm / sunucu başına hizmet verilen kullanıcı sayısında 10 kat iyileştirme sağlayabiliriz.

Patronunuza AWS hosting faturanızın 10 katına düşeceğini ve no-brainer olduğunu söyleyin! Şşş ... ama Amazon'a söyleme ... :)


3
Ve söylemeyi unutmuşum o daha temiz paralel koduna açar bize kod bakım binlerce kurtardı akka vadeli ait monadic doğa ...
piotrga

8
Çağrıların yüksek gecikme süresi, düşük verim olduğunu varsayalım? Diğer sunucuları aramak, yanıt beklemek gibi mi (proxy)?
StaxMan

38

Akka'yı büyük ölçekli bir Telco projesinde kullanıyoruz (maalesef çok fazla ayrıntı açıklayamıyorum). Akka oyuncuları bir web uygulaması tarafından uzaktan dağıtılır ve erişilebilir. Bu şekilde, Google protobuffer tabanlı basitleştirilmiş bir RPC modelimiz var ve Akka Vadeli İşlemleri'ni kullanarak paralellik elde ediyoruz. Şimdiye kadar, bu model mükemmel bir şekilde çalıştı. Bir not: Java API'sini kullanıyoruz.


Bize biraz daha anlatır mısınız? Afaik Vadeli İşlemleri tel üzerinden gönderilemez (serileştirilmiş). Çok fazla gelecek ve birkaç aktör mü yoksa ikisi arasında mı? Tüm serileştirmeler için protobuf mu kullanıyorsunuz ve oyunculara mesaj mı gönderiyorsunuz?
Aktau

Bu, Akka olmadan kolayca halledilebilecek gibi görünüyor.
Erik Kaplun

1
TDC, Fiaddesio'nun durumunda Telco şirketidir.
Roman Kagan

37

Sohbet sunucusunu bir seviye yukarı kaldırırsanız, yanıtı alırsınız.

Akka, Erlang'ın "çökmesine izin ver" anlayışına benzer bir mesajlaşma sistemi sunar.

Bu nedenle, mesajların değişen düzeylerde dayanıklılığı ve güvenilirliği gerektiren şeyler şunlardır:

  • Sohbet sunucusu
  • MMO için ağ katmanı
  • Finansal veri pompası
  • İPhone / mobil / herhangi bir uygulama için bildirim sistemi
  • REST Sunucusu
  • Belki WebMachine'a benzeyen bir şey (tahmin edin)

Akka ile ilgili güzel şeyler, kalıcılık için sağladığı seçenekler, STM uygulaması, REST sunucusu ve hata toleransı.

Bir sohbet sunucusu örneğinden rahatsız olmayın, belirli bir çözüm sınıfına örnek olarak düşünün.

Tüm mükemmel belgeleriyle, bu tam soru, kullanım örnekleri ve örnekler arasında bir boşluk olduğunu hissediyorum. Örnekleri akılda tutmak önemsiz değildir.

(Sadece video izleme ve kaynakla oynama deneyimi ile yazılmış, akka kullanarak hiçbir şey uygulamamıştım.)


2
Teşekkürler - Sohbet sunucusunun kötü olduğu anlamına gelmiyordum, sadece tamamlayıcı örnekler isteyeceğim; potansiyel hakkında daha iyi bir fikir edinmek için daha kolay.
StaxMan

REST sunucusunun buraya nasıl uyduğunu merak mı ediyorsunuz? Node.js tarzı zaman uyumsuz sunucu bağlamında mı bahsediyorsunuz? Örnek kullanım örneklerini paylaştığınız için teşekkür ederiz. Onları faydalı buldum.
software.wikipedia

24

Akka'yı işyerinde, en ilginç olanı araç kazasında onarım ile ilgili olan çeşitli projelerde kullanıyoruz. Öncelikle İngiltere'de olmakla birlikte şimdi ABD, Asya, Avustralasya ve Avrupa'ya genişlemektedir. Aktörleri, araçların güvenli ve uygun maliyetli onarımını sağlamak için kaza onarım bilgilerinin gerçek zamanlı olarak sağlanmasını sağlamak için kullanıyoruz.

Akka ile ilgili soru gerçekten daha 'Akka ile yapamayacağınız şey'. Güçlü çerçevelerle entegrasyon yeteneği, güçlü soyutlaması ve tüm hata toleransı özellikleri onu çok kapsamlı bir araç kiti haline getirir.


Peki, seçmek zorunda kalsaydınız en çok hangi yönü seversiniz? Diğer çerçeveler için mevcut entegrasyon, otomatik hata toleransı veya başka bir şey?
StaxMan

6
Kişisel bakış açısından Akka'nın en sevdiğim masaya getirdiği yükseltilmiş soyutlama seviyesidir. Kurumsal bakış açısından entegrasyon yetenekleridir. Bir yaşam yapmak lazım ve Akka iş ve zevk hem çok güzel kapsar :-)
rossputin

İleti akışının nasıl olduğunu açıklayabilir misiniz? Kullanıcı bir tamirhanedeki kişi olup, kilitlenme ile ilgili ayrıntıları bir http formuna girer ve verileri sunucuya gönderir. Bu, akka tarafından işlenen bir mesaj oluşturuyor mu? Bu mesajla ne yapmak için? Veritabanını sorgulamak için girilen bilgileri ayıklayın ve ardından yanıtı web-ön ucuna geri göndermek için kuyruğa sokun.
2018'de

24

Akka'yı birkaç farklı şey için kullanabilirsiniz.

Teknoloji yığınını Scala ve Akka'ya taşıdığım bir web sitesinde çalışıyordum. Web sitesinde gerçekleşen hemen hemen her şey için kullandık. Bir Chat örneğinin kötü olduğunu düşünseniz bile, temelde hepsi aynıdır:

  • Web sitesindeki canlı güncellemeler (ör. Görüntülemeler, beğeniler, ...)
  • Canlı kullanıcı yorumları gösteriliyor
  • Bildirim hizmetleri
  • Arama ve diğer tüm hizmet türleri

Özellikle canlı güncellemeler kolaydır, çünkü bir Chat örneğinin istediklerine kaynar. Hizmetler bölümü başka ilginç bir konudur, çünkü uzaktan aktörleri kullanmayı seçebilir ve uygulamanız kümelenmemiş olsa bile, bunu farklı makinelere kolayca dağıtabilirsiniz.

Akka'yı bir dizüstü bilgisayardan bir veri merkezine ölçeklendirme fikriyle PCB otomatik yönlendirici uygulaması için de kullanıyorum. Ne kadar fazla güç verirseniz, sonuç o kadar iyi olur. Her zamanki eşzamanlılığı kullanmaya çalışırsanız bunu uygulamak son derece zordur çünkü Akka size konum şeffaflığı da verir.

Şu anda bir serbest zaman projesi olarak, sadece aktörleri kullanarak bir web çerçevesi oluşturuyorum. Yine, tek bir makineden bütün bir makine kümesine ölçeklenebilirlik avantajları vardır. Ayrıca, mesaj güdümlü bir yaklaşım kullanmak, yazılım hizmetinizi baştan itibaren yönlendirir. Tüm bu güzel bileşenlere sahipsiniz, birbirinizle konuşuyorsunuz, ancak birbirinizi tanımanız gerekmiyor, aynı makinede yaşıyor, aynı veri merkezinde bile.

Google Reader'ın kapanmasından bu yana, elbette Akka'yı kullanarak bir RSS okuyucu ile başladım. Her şey benim için kapsüllenmiş hizmetler. Sonuç olarak: Aktör modelinin kendisi ilk olarak benimsemeniz gereken şeydir ve Akka, yol boyunca alacağınız birçok fayda ile uygulamanıza yardımcı olan çok güvenilir bir çerçevedir.


Merhaba Joe, siteyi güncellemek için mesajların nasıl kullanıldığını açıklayabilir misiniz? İçerik yazarı için bir sisteminiz var mı; yeni bir makale yaratır ve kurtarır. Bu, gelen trafiği işleyen birkaç sunucuya gönderilen bir ileti oluşturur mu? Her sunucu güncelleme mesajını mümkün olan en kısa sürede işler. Her yeni tarayıcı isteği sayfanın güncellenmiş bir sürümünü alıyor mu? Thank you
surfmuggle

18

Twimpact.com için analiz ve trend işlemlerimizi dağıtmak için akka devesi eklentisi ile kullanıyoruz . Saniyede 50 ila 1000 mesaj işlemek zorundayız. Deve ile çok düğümlü işlemeye ek olarak, tek bir işlemcideki çalışmayı maksimum performans için birden fazla çalışana dağıtmak için de kullanılır. Oldukça iyi çalışıyor, ancak tıkanıklıkların nasıl ele alınacağının anlaşılmasını gerektiriyor.


Akka'nın hata toleransını da mı kullanıyorsunuz?
Erik Kaplun

Spark kümesine erişimimiz varsa Spark Streaming'a ne dersiniz?
skjagini

18

Akka (Java API) üzerinde ellerimi deniyordum. Denediğim şey Akka'nın aktör tabanlı eşzamanlılık modelini düz Java eşzamanlılık modeliyle (java.util.concurrent sınıflar) karşılaştırmaktı.

Kullanım durumu, karakter sayısının uygulanmasını azaltan basit bir kanonik harita idi. Veri kümesi, rastgele oluşturulmuş dizelerin (400 karakter uzunluğunda) bir koleksiyonuydu ve buradaki ünlülerin sayısını hesapladı.

Akka için bir BalancedDispatcher (iş parçacıkları arasındaki yük dengelemesi için) ve RoundRobinRouter (fonksiyon aktörlerimi sınırlamak için) kullandım. Java için, yürütmeleri çatallandıracak / azaltacak ve sonuçlara katılacak basit çatal birleştirme tekniği (herhangi bir iş çalma algoritması olmadan uygulanmış) kullandım. Birleştirmeyi mümkün olduğunca paralel hale getirmek için ara sonuçlar blokaj sıralarında tutuldu. Muhtemelen, yanılmıyorsam, bir şekilde mesaj aldıkları Akka oyuncularının "posta kutusu" kavramını taklit ederdi.

Gözlem: Orta yüklere (~ 50000 dize girişi) kadar sonuçlar karşılaştırılabilir ve farklı iterasyonlarda biraz değişmiştir. Ancak, yükümü ~ 100000'e yükselttiğimde Java çözümünü asacaktı. Java çözümünü bu koşulda 20-30 iş parçacığı ile yapılandırdım ve tüm yinelemelerde başarısız oldu.

Yükü 1000000'e çıkarmak Akka için de ölümcüldü. Kodu çapraz kontrol etmek isteyen herkesle paylaşabilirim.

Bu yüzden benim için Akka, geleneksel Java çok iş parçacıklı çözümden daha iyi ölçekleniyor gibi görünüyor. Ve muhtemelen nedeni Scala'nın kaput büyüsünün altında.

Sorunlu bir etkiyi, olayı ileten bir mesaj olarak modelleyebilirsem, Akka'nın JVM için iyi bir seçim olduğunu düşünüyorum.

Test gerçekleştirildiği tarih: Java sürüm: 1.6 IDE: Eclipse 3.7 Windows Vista 32 bit. 3GB RAM. Intel Core i5 işlemci, 2,5 GHz saat hızı

Test için kullanılan sorun alanı tartışılabilir ve Java bilgimin izin verdiği kadar adil olmaya çalıştım :-)


3
"Kodu çapraz kontrol etmek isteyen herkesle paylaşabilirim." Sakıncası yoksa isterim.
n1r3

3
Ben de kodu istiyorum, bir github link gönderebilir miyim?
Gautam

İlginiz için teşekkürler. Ne yazık ki bir github repo kurmak bazı sorunlar var. Bana e-postalarınızı verebilirseniz, kaynak kod üzerinden posta gönderebilirim. Ve geç cevap için pişman!
sutanu dalui

@sutanudalui Hala kodunuz var mı, lütfen e-postamı paylaşabilir miyim?
Jay

16

Akka'yı konuşulan iletişim sistemlerinde ( primetalk ) kullanıyoruz. Hem dahili hem de harici. Tek bir küme düğümünde aynı anda çok sayıda telefon kanalı çalıştırmak için, bazı çok iş parçacıklı çerçevelere sahip olmak açıkça gereklidir. Akka mükemmel çalışıyor. Java eşzamanlılığıyla daha önce kabus gördük. Ve Akka ile bu bir salıncak gibi - sadece işe yarıyor. Sağlam ve güvenilir. 24 * 7, kesintisiz.

Bir kanalın içinde, paralel olarak işlenen gerçek zamanlı olay akışı var. Özellikle: - uzun otomatik konuşma tanıma - bir aktörle yapılır; - birkaç ses kaynağını (sentezlenmiş konuşma dahil) karıştıran ses çıkış üreticisi; - metinden konuşmaya dönüştürme, kanallar arasında paylaşılan ayrı bir dizi aktördür; - semantik ve bilgi işleme.

Karmaşık sinyal işleme ara bağlantılarını yapmak için SynapseGrid kullanıyoruz . Karmaşık aktör sistemlerinde DataFlow'un derleme zamanı kontrolü avantajına sahiptir.


14

Son zamanlarda Akka: Word sayımında kanonik harita azaltma örneğini uyguladım . Bu yüzden Akka'nın bir kullanım örneği: daha iyi performans. JRuby ve Akka'nın aktörlerinin her şeyden çok bir denemesiydi , ancak Akka'nın sadece Scala veya Java olmadığını da gösteriyor: JVM'nin üstündeki tüm dillerde çalışıyor.


Daha iyi performanstan neyin sorumlu olduğunu biliyor musunuz (ve aynı zamanda hangi alternatifle karşılaştırıldığında)? Bunun nedeni JVM'de JRuby (yerel Ruby'ye karşı), engellemeyen G / Ç veya başka bir şey nedeniyle ölçeklenebilirlik mi?
StaxMan

2
Yazdığım karşılaştırma: Jruby ardışık VS Jruby aktörlerle. Bu nedenle, daha hızlı infazdan sorumlu olabilecek tek şey aktörlerin katılımıdır. Denemelere hiçbir G / Ç katılmamıştır (bir dosya diskten yüklenir, ancak karşılaştırma zamanlayıcısı ayarlanmadan önce yapılır).
Daniel Ribeiro

Son zamanlarda bir harita azaltma örneği de uyguladım, ancak sadece düz vanilya java github.com/chaostheory/jibenakka
chaostheory 27:11
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.