Çoklu etmen ortamında nesne tabanlı dağıtık bellek paylaşımı
Distributed object sharing in the multi-agent environment
Yazar: METEHAN PATACI
Danışman: PROF. DR. NADİA ERDOĞAN
İstanbul Teknik Üniversitesi / Fen Bilimleri Enstitüsü / Bilgisayar Mühendisliği Ana Bilim Dalı
Derece: Yüksek Lisans, 2014
Konu: Bilgisayar Mühendisliği Bilimleri-Bilgisayar ve Kontrol = Computer Engineering and Computer Science and Control
Dizin: Acenteler = Agents ; Dağıtık nesneler = Distributed objects ; Dağıtık programlama = Distributed programming ; Paralel programlama = Parallel programs

Özet:
Dağıtık sistem, farklı bilgisayarlardaki yazılım ve donanım bileşenleri arasında haberleşme ve koordinasyonun mesaj yoluyla yapılmasıyla ifade edilir. Dağıtık bir sistemin en önemli ve ayırt edici özelliği bir ağın varlığı ve sistem ile ilgili tüm ayrıntıların kullanıcıdan saydam olarak gerçeklenmesidir. Kullanıcı çok işlemcili dağıtık bir sistemde çalışıyor olmasına rağmen, sistem kendisine tek bir sanal işlemci olarak görünür. Ağ üzerinde dosya gönderme, alma gibi uygulama tabanlı işlemler kullanıcı tarafından yürütülür.
Ağda veri paylaşmak gibi dağıtık uygulamaların geliştirimi için çok zaman harcamak ve sistemin heterojen yapısından kaynaklanan çeşitli zorluklarla mücadele etmek gerekir. Dağıtık sistemleri diğer ağlardan yazılım katmanı ayırır. Bu sistemlere kaynakların paylaşma gerekliliğinden dolayı ihtiyaç duyulur. Paylaşılacak kaynaklar disk, yazıcı gibi donanımsal olabileceği gibi veri tabanları, nesneler, dosyalar gibi yazılım tabanlı da olabilir.
Dağıtılmış sistemler genellikle uzak nesne modelini kullanmaktadırlar. Uzak nesne modelinde, nesneler uzak bir alana yerleştirilir ve istemciler bir vekil aracılığıyla bu alana saydam olarak erişirler. Uzak nesne modelinde ölçeklenebilme eksikliği vardır ve sabit yapısından dolayı kullanıcıyı kısıtlar.
Uzak nesne erişim modellerinde nesne erişimi basit fonksiyonlar ile ve kullanıcıya saydam olarak yapılsa da dağıtık mimari üzerinde farklı erişim yöntemleri kullanmaya imkan tanımaz. Nesneler sabit bir konumda duracağından ve her erişim için sistemde nesne konumuna vekiller aracılığıyla çağrı yapmak gerekeceğinden erişim performansında sorunlar çıkması mümkündür. 
Yapılan çalışmada çoklu etmen ortamında nesne paylaşımı gerçeklenmiştir. Etmen, tasarım hedefleri doğrultusunda bir ortam içerisinde bağımsız hareket edebilen bir bilgisayar sistemidir. Birden fazla etmenin aynı ortamda benzer ya da farklı görevleri üstlenerek çalıştıkları ve mesajlaşma yoluyla iletişim kurabildikleri mimariye çoklu etmen sistemi denir. Etmenler proaktiflik, mantıklılık, süreklilik, hareketlilik, bağımsız hareket etme ve reaktiflik gibi özelliklere sahiptir. Bu özelliklerin kullanılma yoğunluğuna göre etmenler farklı tiplere ayrılır. Tüm etmenler bağımsız hareket etme özelliğine sahiptir. Çeşitli dış etkilere karşı bir etmenin ne gibi tepkilerde bulunacağına yazılım karar verir. Geliştirilmiş çoklu etmen sistemleri, etmen haberleşme alt yapısının sunmuş olduğu avantajların yanında oluşturulmuş çoklu etmen ortamı için yararlı servisler sunarlar. Bu servisler genellikle sistem ilk çalıştığında oluşturulan ve tüm etmen platformunu izlemek ile görevli etmenler aracılığı ile sağlanır. Sisteme yeni bir etmen katılması, bir etmenin sistemden ayrılması ya da sistemde içinde sunulan servislerle ilgili mesajların platforma yayılması gibi görevleri üstlenen yardımcı etmenler sayesinde kullanıcı ve yazılımcı birçok hizmeti hazır olarak alabilir.
Geliştirilen çoklu etmen ortamında dağıtık nesne paylaşım sisteminde JADE etmen mimarisi kullanılmıştır. JADE, Java programlama dili ile geliştirilmiş ve FIPA'nın etmenler için hazırlamış olduğu standartları gerçekleyen çoklu etmen ortamıdır. Sistemin Java programlama dili ile yazılmış olması platform bağımsızlığını beraberinde getirir ve bu durum dağıtık nesne paylaşımının heterojen ortamlarda da yapılabilmesini sağlar.
Paylaşılan nesnelerin ağ üzerinde dağıtılması ve yerel erişime imkan tanıması yük dengeleme, performans, koruma ve kullanılabilirlik açısından büyük öneme sahiptir. Dağıtılmış sistemlerde yerellik çok önemli bir konudur. Ağ üzerinde kuyruklarda beklememek ve meydana gelebilecek olumsuz durumlardan uzak kalmak için yerel kopyaları taşımak önemlidir.
Dağıtık bir sistemde paylaşılan bir nesnenin en güncel kopyasını taşıyan birim nesnenin sahibidir. Nesne sahipliği verinin bulunduğu yerleşkeyle ifade edilir. Bir nesne bir yerleşkeye atanmış ve tüm erişim isteklerinde değişmez bir şekilde bu yerleşkede duruyorsa buna sabit sahiplik denir. Sabit sahiplik yönteminde istemcilerin veriye doğrudan yazma hakkı yoktur. Nesnelere yazma isteği nesne sahibine iletilir ve nesne sahibi ilgili nesneyi belleğinde günceller. Bu yöntemde yoğun istekler sorun teşkil eder. Dinamik sahiplik yönteminde; nesne sahipliği sistem içinde el değiştirir. Güncel veriye kimin sahip olduğunu belirleme problemi ortaya çıkar. Merkezi sahiplik bilgisini tutan sunucuyu belirlemek, sahiplik bilgisini tutan sunucuyu dağıtık olarak atamak, veri sahibini ağa yayın yaparak belirlemek gibi yöntemlerle nesnenin ağ üzerinde yerleşkesi belirlenir ve erişimler gerçekleştirilir.
Verinin sistem üzerinde dağıtılması ve veriye erişim süresinin azaltılması sistemde çözülmesi gereken en önemli problemlerdendir. Ayrıca erişilen verinin tutarlılığının ve güncelliğinin sağlanması da çok önemlidir. Erişilmek istenen nesnenin her zaman en son değerinin elde edilmesi ve sistem içinde farklı düğümlerin aynı nesne için farklı değerlere sahip olmaması gerekir.
Ortak belleğin sistem üzerinde yayılmasında kopyalama ve göç ettirmeye dayalı çeşitli algoritmalar bulunur ve bu algoritmaların birbirlerine göre çeşitli avantaj ve dezavantajları vardır. Tüm nesne sahiplik bilgisinin bir yöneticide bulunduğu merkezi ortak bellek algoritmasında, istemciler yöneticiden haberdardır ve yönetici ile haberleşecek alt yapıya sahiptirler. Veri erişim istekleri yöneticiye yapılır ve yönetici sistem içinde veriyi bularak istemciye iletmekle görevlidir. Okunabilir kopyalama algoritmasına göre paylaşılan veri sisteme yayılmış durumdadır. Sadece sahip düğüm değil kullanıcı düğümler de belleklerinde veriyi saklarlar. Bu algoritmaya göre veriye sadece sahip düğüm yazabilir. Göç ettirme algoritmasında bir yönetici yoktur. Veri erişim ve güncelleme işlemlerini her makine kendisi yapar. Veri aynı anda sadece bir düğümde bulunabilir ve sadece bir düğüm yazma ve okuma hakkına sahiptir. Tam kopyalamalı algoritmaya göre, veri kopyaları birden fazla düğümde bulanabilir. Farklı düğümler aynı zamanda veriyi değiştirme hakkına da sahiptir. Bu özelliğinden dolayı tam kopyalamalı algoritmada veri tutarlılığını sağlamak oldukça zordur.
Veri güncelleme işlemi için dağıtık sistemlerde farklı modeller vardır. Bu modeller verinin güncelleme gereksinimini, zamanını ve şeklini belirler. Güçlü veri güncelleme modellerinde ağ üzerinde her zaman en güncel veriye ulaşmak garanti edilir. Zayıf güncelleme modellerinde ise en güncel verinin alınmasında bir garanti yoktur. Sistem güncel ya da güncele en yakın veriyi sağlamak zorundadır.
Nesneler veri ile davranışların birlikte çalışmasını sağlayan ve veri yapısında oluşabilecek hataları engellemeye yönelik mekanizmalara sahip varlıklardır. Nesnelerin sahip olduğu veri gizleme özelliği ile dağıtık sistemlerde veri güvenliği sağlanır ve arayüz ile gerçekleme birbirinden ayrılır. Aynı arayüze sahip farklı nesnelerin ağ üzerindeki düğümlerde yorumlanması ve yönetimi daha kolay olur. Farklı düğümler nesnelerin veri kısımlarını yönetirken nesne içindeki metotları kullanacağından veri alanı yönetimi kolaylaşır ve yapılan işlemlerden kaynaklanan tutarsızlık problemi en aza indirgenir.
Çoklu etmen ortamı üzerinde gerçekleştirilen dağıtık nesne paylaşımı sistemi etmenler arasında mesajlaşmalarla nesne paylaşımını sağlamaktadır. Oluşturulan nesne paylaşım sistemi; sistem koordinatörü ve yerel sunucu yöneticisi olmak üzere iki temel sunucu sistemi üzerine kuruludur.
Yerel sunucu, istemciye yerleşke olarak yakın sunucular üzerinden nesnelere erişmeyi ve nesne erişim işlemlerini kullanıcı etmenden saydam olarak gerçekleştirmeyi sağlar. Yerel sunucu farklı görevlere sahip üç etmenden oluşur. Bunlardan birincisi, başlangıç yöneticisi etmeni; yerel sunucu ile ilgili ilklendirme işlemlerini gerçekleştirir. Sistem koordinatörü ile iletişime geçerek yaratılacak yerel sunucu etmenleri için bir tanımlayıcı isim uzantısı elde eder ve sistem koordinatörü erişim bilgileri gibi başlangıç bilgilerini sağlayarak diğer yerel sunucu etmenleri olan yerel sistem yöneticisini ve nesne yöneticisini yaratır. İkinci yerel sunucu etmeni olan yerel sistem yöneticisi; yerel sunucu için bir ağ geçidi görevi üstlenmektedir. Sistem içinde ve koordinatörle iletişime geçerken mesajlar öncelikle yerel sistem yöneticisine ulaştırılır. Geri dönüş zamanı açısından kritik mesajlar yerel sistem yöneticisi kullanılmadan doğrudan hedef etmene iletilebilir. Üçüncü yerel sunucu etmeni nesne yöneticisidir. Nesne yöneticisi, nesnelere olan erişim işlemlerini gerçekleştirir. Nesne kopyaları, erişim isteği listesi, nesne durumu gibi bilgiler nesne yöneticisinin kontrolündedir.
Yerel sunucular yaratılan her nesne erişimcisi etmen için ayrı olabileceği gibi belirli bir makine üzerinde birden fazla istemci etmene hizmet verebilir. Yerel sunucular sayesinde nesne sahipliği ağ üzerinde el değiştirir. Yani güncel nesne kopyası en son yazma isteği yapan yerel sunucunun nesne yöneticisinin belleğinde bulunur. Etmenler üzerinde çalışma, nesne sahipliğinin dinamik olarak el değiştirebilmesi, erişimlerin yerel olarak gerçekleştirilebilmesi özellikleri yapılan çalışmanın ayırt edici özelliklerindendir. Yerel bir sunucunun çökmesi durumunda ilgili sunucunun sahipliğini üstlendiği paylaşılan nesneler için sistem koordinatörü denetiminde olan nesne yöneticisi geçici sahiplik yapar.
Sistem koordinatörü, nesne paylaşım platformunda oluşabilecek beklenmedik durumları ve dağıtık yapıdan kaynaklanan problemleri çözen birimdir. İçinde farklı görevlere sahip beş birim vardır. Birincisi olan başlangıç yöneticisi, sistem için ilklendirme aşamalarını gerçekleştirir ve diğer sistem koordinatörü etmenlerini yaratır. İkinci birim sistem yöneticisi, ağ geçidi görevini üstlenir ve olayları izleyerek gerekli tepkileri verir. Üçüncü birim yerleşke yöneticisi, ağ üzerinde yaratılmış olan nesnelerin yerleşke bilgilerini saklar ve yapılan sorgulamalara hızlı bir şekilde cevap döner. Dördüncü birim isimlendirme yöneticisi, ağ üzerinde yaratılmış olan tüm nesnelerin isimlendirme bilgisini saklar. Yapılan isim uygunluğu sorgulamalarına yanıt verir ve nesnelerin ağ üzerinde tekilliğini sağlar. Beşinci birim nesne yöneticisidir. Sistem koordinatörü altında görevli nesne yöneticisi, yerel sunucu altında yer alan nesne yöneticisinin tüm özelliklerine sahiptir. Bu özelliklerin yanında ağda gerçekleşen tüm erişim ve nesne yaratma işlemlerinin bilgilerini toplar. Yerel sunucunun sahipliğini üstlendiği bir nesnenin kopyası aynı zamanda sistem koordinatörü altında bulunan nesne yöneticisinde de vardır. Böylelikle paylaşılan nesneler ile ilgili ağda herhangi bir problem oluştuğunda sistem koordinatörü nesne yönetici ile bu sorunlara çözüm üretilir. Sistem koordinatörünün nesne yöneticisi normal koşullarda bir nesnenin sahipliğini almaz. Yerel sunucuları ve erişim işlemlerini denetlediğinden yerel sunucunun erişilemez olması gibi durumlarda sahip olduğu denetçi mekanizmalardan yararlanarak nesne sahipliğini üstlenir ve erişim isteklerine cevap verir. Yapılan bir yazma işlemi ile sahipliği geçici olarak üstlenilen nesne tekrar erişimci yerel sunucu nesne yöneticisine verilir.
Çok okuyuculu tek yazıcılı mimaride gerçekleştirilen sistem yerel nesne erişimlerine olanak tanıdığından aynı etmenin yapacağı sık yazma işlemleri yüksek performansla gerçekleştirilir. Sahiplik değişimi ile nesne kopyalarının ağ üzerinde yayılması, olumsuz koşullarda ağın herhangi bir yerinden bir nesne kopyasının bulunabilmesini sağlar. 
Sistem kullanıcıya nesneler için okuma, yazma, gevşek okuma, silme, yeniden adlandırma, serbest bırakma özelliklerini sunmaktadır. Kullanıcılar erişim istekleri ile elde ettikleri nesnelerin yapısı konusunda daha önceden anlaşmış olmalıdır. Nesne üzerinde yapılan yazma istekleri sonucu nesne kilitlenir. Bu yüzden yazma erişimi hakkı kazanan bir etmen yazma işlemini çok hızlı bir şekilde tamamlayarak nesneyi serbest bırakmalıdır. 
Nesne erişim işlemlerinde erişimlere zaman aşımı süresi tanımlanarak kullanıcı etmenin aynı yazılım noktasında takılması engellenmiş ve sistemin kendi kendine karar verebilme özelliğine uygun çözümler üretilmiştir. Nesne sahibi sunucuların etkinliğini (canlılığını) kaybetmesi gibi durumlarda sistem koordinatörü gerekli sorumlulukları alarak sistemin sorunsuz bir şekilde çalışmasını sağlayacak önlemleri alacak şekilde tasarım yapılmıştır.
Geliştirilen nesne paylaşım sistemi bir rezervasyon uygulaması ile test edilmiştir. Rezervasyon uygulamasında yaratılan salon ve içindeki koltuklar paylaşılan nesneyi temsil etmektedir. Kullanıcılar koltuk satın almak istediği salon ismi ile sistemde bir okuma işlemi gerçekleştirir ve bu işlem ile salonun güncel durumunu elde eder. Uygun koltuklar kullanıcı tarafından seçilir ve seçim onaylanır (yazma erişimi). Seçilen koltuklardan herhangi birisini daha önce onaylayan bir kullanıcı yoksa yazma işlemi başarı ile gerçekleşir. Başka bir kullanıcı ilgili koltuklardan herhangi birisini satın almışsa sistem kullanıcıya güncel salon durumunu döndürür.
Önerilen nesne paylaşım modelinin sağladığı yerel sahiplik avantajı ve olumsuz koşullarda sunduğu çözümlerin çoklu etmen mimarisinde uygun bir nesne paylaşım ortamı sunduğu görülmüştür.

Abstract:
Distributed system provides communication and coordination between several computer software and hardware components through messages. The existance of a network and transparency of system details are most distinctive properties of a distributed system. Users workona multi processor distributed network but perceivethe system as a single virtual machine. Application based operationssuch as sending and receiving files are executed by users.
Developing data sharing applications takes a long time and heterogenous structure of the system causes some challenges. Its software layer distinguishes distributed systems from other network systems. In general, distributed systems are used because of data sharing requirement. The shared resources can be hardware components such as discs, printers or software components such as databases, objects or files.
Distributed systems usually use remote object models. In a remote object model, object is located on a remote computer and users access this object by using a proxy. Remote object models scalibilty is very hard and it limits users because of non flexible structure.
In a remote object system, object access operations are simple metot calls and provide transparent access to users; howeverthey do not provide varied access operations. Access performance is low because of constant object location and use of proxy for each access.
Sharing objects on a distributed network and local object access operations are important for load balancing, performance, protection and reusability. Local object access is important forqueue performances and network failure situations.
The owner of a remote object is  a unit in distributed system that owns the most up to date copy of the shared object. Object ownership is expressed by object location. If an object is located at a constant location and all object access operations are handled at this location, this kind of ownership is expressed as fixed ownership. Each piece of data is assigned a fixed owner. The owner can usually be calculated in an easy manner from the address of the data. Requesters can directly write access objects in fixed ownership. Requesters send their write requests to fixed owner, and then owner updates the object and returns a response to the requester. The disadvantages of this scheme are obvious; there is a large overhead on every write access, and the data owner becomes a bottleneck in the system. This approach is realized through centralized algorithms. An alternative approach is dynamic ownership where the ownership of a data item moves around the system. Locating object owner is a problem in such systems. As a solution to this problem, we introduce the concept of a manager for an item of data. The manager needs not own the data, but is responsible for tracking the current owner of the data. Another way to determine object owner is broadcasting a message to the network and waiting for a reply.
Another problem is maintaining replicas of an object over the network and manage object access. Consistency of the object in system becomes a very important issue. When there are multiple copies of an object spread around the distributed system, it must be ensured that no user (agent, processor etc.) reads stale data once a write has been completed on a machine. 
There are two main approaches for write synchronization. A processor can broadcast writes, or it can invalidate all other copies before doing an update. These two approaches are known as write-broadcast (write update) and write-invalidate. The write broadcast approach, broadcasts all writes to all nodes that have copies of the data, effectively replicating data. If a low level broadcast primitive is not available, then there will be a problem locating all the sites with copies of the data set. Write broadcast is usually considered too expensive to be used as a general solution. Ordering of broadcasts is a problem and replication algorithms are usually implemented using a single write sequencer site that broadcasts writes to all involved sites. Inthe invalidation approach, we synchronize write accesses and invalidate all the other copies of the data. This can easily be done with broadcasts, but the expense of broadcasting can grow rapidly in large distributed systems and hosts may spend a lot of time handling broadcast messages. If a distributed system uses multicasts for individual messages instead, then we again have a problem of location. We need to locate the processors that currently have a copy of data in the distributed system. We may have a manager that has a list of proccessors with a copy of the data. If write is allowed to proceed before the invalidation is complete, it is possible for non current read-only copies of an object to exists for a short period of time.
There are copy based and migration based algorithms for shared memory spread along distributed network. Those algorithms have some advantages and disadvantages. We usually use copy based algorithms for read only accesses. Read only copies of shared data can be at different processors on network and if one processor wants to make read only accessesto the data, a copy of the shared data is transferred to the processors memory. In this approach, write requests are problem for data consistency because too muchshared data copy is spread around the network. With migration based algorithms, only one processor has write access permisson and this processor is said to be the owner of the shared data. When a new write request is received, data ownership changes and the data migrates to requester processor's memory.
There are several data update models for distributed systems. These models definethe need foran update, update time and the update procedure. Strong data update models always guarantee most up to date data access. Weak data update models do not guarantee up to date data access. The system provides up to date or near up to date data for accessors.
An object is a location in memory having a value and possibly referenced by an identifier. An object can be a variable, a function, or a data structure. An object has data hiding ability which provides data safety, separating abstraction and implementation. Different objects may have the same interface and this provides easy interpretation and management of data at distributed systems.
A software agent is a computer program that acts on behalf of a user or a program in a relationship of agency. If more than one agent exists and communicates for same or different job in an environment we call this architecture multi agent system. In this work, a framework for distributed object sharing in a multi agent environment is implemented. Users of shared objects, actually agents, are provided an interface which allows them to access, to read or write remote objects, in a transparent manner, regardless of their current locations in the distributed system. The framework implements the protocols that enables object sharing and replica management with a high degree of  fault tolerance.
We have use JADE as the implementation platform for the agent based architecture of the framework. JADE is a multi agent environment that using JAVA programming language and it is compatible with FIPA standards. The framework supports object sharing through agent interactions via messaging. The architecture relies on two main server components, namely the system coordinator and a local server manager for each remote site.The local server manager is the unit which intercepts agent users access requests to remote objects. It cooperates with the system coordinator to carry out the execution steps needed to answer those requests.
The local server manager includes three agents, each with different tasks. One of them is the initiation manager whose task is to run the initialization operations of the local server manager. It interacts with the system coordinator to get a unique descriptor name for the local system and system coordinator access information, which it uses to create the local server and the object manager. The second agent is the local server which acts as gateway for local server manager. Lastly, the third agent is the object manager which is responsible for all object access operations. It stores replicas of shared objects and provided object access management operations. 
The local server manager servesall agents which are located on the same remote machine.Object ownership spreads around the distributed network by local server managers. Most up to date object copies (object ownership) live at local server managers object manager. When a write request is received from a local server manager, object ownership is transferred to requester agents local server manager. The most distinguishing property of the framework is its agent based architecture and dynamic sharing of object ownership.
The system coordinator controls the whole system and it solves unexpected situations and problems. It includes five agents with different tasks. The inititation manager makes initializations for the system and creates the other system coordinator agents. The system manager acts as gateway for the system coordinator. The location manager stores live object locations (object owner addresses) and gives quick responses for location queries. The naming manager stores shared object names in the distributed system. It gives quick responses to object name suitability queries and provides object name uniqueness. The object manager has all the capabilities of the local server manager's object manager, and in addition to those it collects all object access and create informations in distributed system. Local server's object replicasare maintained at the same time at system coordinators object manager (by information messages which comes from local server) to overcome problems. The system coordinator's object manager doesn't take object ownership in normal situations. It takes information messages from object owners and when an unexpected problem occurs on objects (such as an owner agent failure) it takes the object ownership of the objects owned by the failing agent.When a write access request arrives for those objects, the object ownership is transferred to the requester's local server object manager.
The framework implements the MRSW (multiple reader/ single writer) access model and provides local object access. If an agent makes too many write accesses or it is already the object owner, object accesses occurlocally and therefore is very fast. When ownership changes in distributed network, local object copy spreads around and when an unwanted situation occurs in system we can find object copies for restore operations.
The framework  provides users an interface with different kinds of access operations to shared objects. These are read, write, loose read (object value may not be up to date), delete, rename, release operations. Users must have agreed upon objects structure before. When a write request is received, the object is locked, preventing other agents read access requests, therefore an agent which has write permission should quickly finish its job and release the object.
The framework monitors the processing time of object access requests. There is a predefined and configurable maximum object access duration time limit in the system. With this approach, a request which can not be met within the defined period is cancelled with an error return code, thus avoiding gettings stuck in a block of code, and allowing users to make alternative decisions. The system coordinator takes solution oriented responsibilities for unwanted and unexpected situations such as local server failure.
The framework described enables distributed object sharing in a multi agent environment. It provides local object ownership and local access that minimizes network traffic, and solves problems that arise in distributed object sharing in a multi agent environment.