Mikro hizmet iletişimi

Aslında mikro hizmetleri inceliyorum ve bir sorunla karşı karşıyayım.

Bağlam

İki mikro servis geliştiriyorum:

  • User management, Spring Based, with MySQL database
  • Planning management, ASP.NET based with SQL Server database. The only access point of this service is an API listing some RESTFUL endpoints like /planning/{day}/{userId} or /planning/{startDate}/{endDate}/{idUser}
  • Billing management, Node.Js based with MongoDB.

Problemler

  1. İki hizmeti birleştirmeden planlama bilgilerine yalnızca kullanıcı hizmeti üzerinden erişime izin vermek için ne yapabilirim? Planlama hizmetine daha sonra başka bir yerden erişilebileceğini bilmek, ancak şimdi değil.

  2. MySQL veritabanındaki bir kullanıcıya karşılık gelen faturalandırma servisinden faturalama bilgilerine nasıl erişebilirim? Mikro-servislerin bağlı olmadığını biliyorum ve bu nokta beni öldürüyor, çünkü hayır olarak birleştirilmesi gerekiyor? Bir faturada idUser 'a atıfta bulunmak gibi mi? Aksi takdirde, API’mdan hangi faturalandırmayı göstereceğimi nasıl bilebilirim? Daha doğrusu, mikro hizmetler bir arada olmadan aralarında nasıl iletişim kurarlar?

  3. Diğer hizmetlerden gelen kimlik doğrulama isteklerine kimlik doğrulama isteklerini çoğaltmadan kimlik doğrulaması nasıl oluşturulur?

5
Lütfen cevabı isterseniz kabul edildi olarak işaretleyin. Teşekkürler!
katma yazar ivan.sim, kaynak
Lütfen cevabı isterseniz kabul edildi olarak işaretleyin. Teşekkürler!
katma yazar ivan.sim, kaynak

6 cevap

Burada tanınması gereken önemli nokta, kullanıcı kimlik doğrulaması, kullanıcı yetkilendirmesi ve kullanıcı oturumu yönetimi çözümlerinin uygulanması söz konusu olduğunda, mikro hizmet mimarisi çözümleri ve diğer dağıtılmış sistem mimarisi çözümleri arasında önemli kavramsal farklılıklar olmadığıdır.

Kavramsal olarak, çözüm, Kerberos protokolünün bir uygulaması olacaktır. Kullanıcı kimliğini belirlemek için bir "bilet" (ya da "bugün daha yaygın olarak adlandırılan" belirteci) kullanılmaya başlandı.

Bu durumda, kullanıcı yönetimi servisiniz, diğer tüm servislerin farkında olması gereken arka uç kimlik doğrulama ve yetkilendirme sunucunuz olarak hizmet edecektir. Kullanıcı kimliğinizi ve rollerinizi belirlemek için kullanıcı belirteçlerinin yayınlanmasından ve doğrulanmasından kullanıcı yönetimi hizmetiniz sorumlu olacaktır.

İki hizmeti birleştirmeden planlama bilgilerine yalnızca kullanıcı hizmeti üzerinden erişime izin vermek için ne yapabilirim?

Bir kullanıcı .Net hizmetinize erişmeye çalıştığında, servis sağlayıcınızın kimliğini belirlemek için kullanıcı yönetim hizmetinize güvenmesi gerekir. Başka bir deyişle, .Net hizmetinizin kullanıcı yönetimi hizmetinizin nerede olduğunu bilmesi gerekir (ör. URL’si). etcd veya nats .

Mysql veritabanındaki bir kullanıcıya karşılık gelen fatura hizmetinden fatura bilgilerine nasıl erişebilirim?

En basit çözüm, fatura hizmetinin URL'sinde bir sorgu parametresi olarak (tek?) Anahtarına (kullanıcı kimliğini söylemek) geçmektir. Elbette, faturalandırma hizmetinizin, anahtarın URL’ye eklenmesini bekleyecek şekilde uygulanması gerekir. Eklenmesi gereken ek anahtarlarınız varsa (örneğin, fatura tarihleri, sipariş durumu vb.), Belki de çalışma zamanında bu bilgileri saklamak için memcached veya redis . Tabii ki, şimdi bu tek başarısızlık noktasını ekosisteminize eklemenin avantajlarını göz önünde bulundurmalısınız.

Diğer hizmetlerden gelen kimlik doğrulama isteklerini kimlik doğrulama hizmetine yineleme olmadan çoğaltmadan nasıl oluşturulur?

Yine, kullanıcı kimliği doğrulandıktan sonra, tüm kimlik bilgileri memcached veya redis .

5
katma

Burada tanınması gereken önemli nokta, kullanıcı kimlik doğrulaması, kullanıcı yetkilendirmesi ve kullanıcı oturumu yönetimi çözümlerinin uygulanması söz konusu olduğunda, mikro hizmet mimarisi çözümleri ve diğer dağıtılmış sistem mimarisi çözümleri arasında önemli kavramsal farklılıklar olmadığıdır.

Kavramsal olarak, çözüm, Kerberos protokolünün bir uygulaması olacaktır. Kullanıcı kimliğini belirlemek için bir "bilet" (ya da "bugün daha yaygın olarak adlandırılan" belirteci) kullanılmaya başlandı.

Bu durumda, kullanıcı yönetimi servisiniz, diğer tüm servislerin farkında olması gereken arka uç kimlik doğrulama ve yetkilendirme sunucunuz olarak hizmet edecektir. Kullanıcı kimliğinizi ve rollerinizi belirlemek için kullanıcı belirteçlerinin yayınlanmasından ve doğrulanmasından kullanıcı yönetimi hizmetiniz sorumlu olacaktır.

İki hizmeti birleştirmeden planlama bilgilerine yalnızca kullanıcı hizmeti üzerinden erişime izin vermek için ne yapabilirim?

Bir kullanıcı .Net hizmetinize erişmeye çalıştığında, servis sağlayıcınızın kimliğini belirlemek için kullanıcı yönetim hizmetinize güvenmesi gerekir. Başka bir deyişle, .Net hizmetinizin kullanıcı yönetimi hizmetinizin nerede olduğunu bilmesi gerekir (ör. URL’si). etcd veya nats .

Mysql veritabanındaki bir kullanıcıya karşılık gelen fatura hizmetinden fatura bilgilerine nasıl erişebilirim?

En basit çözüm, fatura hizmetinin URL'sinde bir sorgu parametresi olarak (tek?) Anahtarına (kullanıcı kimliğini söylemek) geçmektir. Elbette, faturalandırma hizmetinizin, anahtarın URL’ye eklenmesini bekleyecek şekilde uygulanması gerekir. Eklenmesi gereken ek anahtarlarınız varsa (örneğin, fatura tarihleri, sipariş durumu vb.), Belki de çalışma zamanında bu bilgileri saklamak için memcached veya redis . Tabii ki, şimdi bu tek başarısızlık noktasını ekosisteminize eklemenin avantajlarını göz önünde bulundurmalısınız.

Diğer hizmetlerden gelen kimlik doğrulama isteklerini kimlik doğrulama hizmetine yineleme olmadan çoğaltmadan nasıl oluşturulur?

Yine, kullanıcı kimliği doğrulandıktan sonra, tüm kimlik bilgileri memcached veya redis .

5
katma

Burada tanınması gereken önemli nokta, kullanıcı kimlik doğrulaması, kullanıcı yetkilendirmesi ve kullanıcı oturumu yönetimi çözümlerinin uygulanması söz konusu olduğunda, mikro hizmet mimarisi çözümleri ve diğer dağıtılmış sistem mimarisi çözümleri arasında önemli kavramsal farklılıklar olmadığıdır.

Kavramsal olarak, çözüm, Kerberos protokolünün bir uygulaması olacaktır. Kullanıcı kimliğini belirlemek için bir "bilet" (ya da "bugün daha yaygın olarak adlandırılan" belirteci) kullanılmaya başlandı.

Bu durumda, kullanıcı yönetimi servisiniz, diğer tüm servislerin farkında olması gereken arka uç kimlik doğrulama ve yetkilendirme sunucunuz olarak hizmet edecektir. Kullanıcı kimliğinizi ve rollerinizi belirlemek için kullanıcı belirteçlerinin yayınlanmasından ve doğrulanmasından kullanıcı yönetimi hizmetiniz sorumlu olacaktır.

İki hizmeti birleştirmeden planlama bilgilerine yalnızca kullanıcı hizmeti üzerinden erişime izin vermek için ne yapabilirim?

Bir kullanıcı .Net hizmetinize erişmeye çalıştığında, servis sağlayıcınızın kimliğini belirlemek için kullanıcı yönetim hizmetinize güvenmesi gerekir. Başka bir deyişle, .Net hizmetinizin kullanıcı yönetimi hizmetinizin nerede olduğunu bilmesi gerekir (ör. URL’si). etcd veya nats .

Mysql veritabanındaki bir kullanıcıya karşılık gelen fatura hizmetinden fatura bilgilerine nasıl erişebilirim?

En basit çözüm, fatura hizmetinin URL'sinde bir sorgu parametresi olarak (tek?) Anahtarına (kullanıcı kimliğini söylemek) geçmektir. Elbette, faturalandırma hizmetinizin, anahtarın URL’ye eklenmesini bekleyecek şekilde uygulanması gerekir. Eklenmesi gereken ek anahtarlarınız varsa (örneğin, fatura tarihleri, sipariş durumu vb.), Belki de çalışma zamanında bu bilgileri saklamak için memcached veya redis . Tabii ki, şimdi bu tek başarısızlık noktasını ekosisteminize eklemenin avantajlarını göz önünde bulundurmalısınız.

Diğer hizmetlerden gelen kimlik doğrulama isteklerini kimlik doğrulama hizmetine yineleme olmadan çoğaltmadan nasıl oluşturulur?

Yine, kullanıcı kimliği doğrulandıktan sonra, tüm kimlik bilgileri memcached veya redis .

5
katma

Alternatif bir yaklaşım, kimlik doğrulama/yetkilendirme ile diğer hizmetlere erişimi koruyan başka bir mikro servis oluşturmak olabilir. Bu, API Ağ Geçidi düzeniyle, buradaki ek bilgilerle ilgilidir: http://microservices.io/patterns/apigateway.html . Temel olarak, sisteminize tek bir giriş noktanız olacaktı ve istemci kimlik doğrulamasını yürütmek için oauth veya json web belirteçlerini kullanabilirsiniz.

Ayrıca, mikro hizmetler arasında güvenli erişim, http isteğinde ek başlıklar ve işaretler gibi bir şey kullanılarak da sağlanabilir ("dahili" kimlik doğrulaması).

Benim görüşüme göre, mikro hizmetler bu sorumluluğa sahip olmamalıydı çünkü muhtemelen uygulamanızdaki auth mantığını paylaşmak/çoğaltmak zorunda kalacaksınız.

Başka bir notta, ID'leri "yabancı anahtar" olarak paylaşmak, ilgili verilerinizi ayırmak için iyi bir yaklaşımdır.

4
katma
Evet bu tam olarak api ağ geçidi için yapıldığı şey. Sorun şudur: Bir kullanıcı faturalandırma apisine ana bilgisayarından: portundan erişmeye çalışırsa? İsteği işleyen ve authservice adındaki api ağ geçidi olduğunu bilerek, güvenlik sorunum var gibi görünüyor ... :-)
katma yazar mfrachet, kaynak
Auth hizmetinden her zaman geçmek için Faturalandırma hizmeti içindeki kompozisyonu kullanabilirsiniz. Burada örnek: stackoverflow.com/questions/31044380/…
katma yazar Nima Gardideh, kaynak
Bağlantı noktalarını engelleyerek bu mikro hizmetlere erişimi sınırlayabilirsiniz. Veya dediğim gibi, korumalı servisleriniz arasında bir çeşit paylaşılan jeton alabilirsiniz. Gerçekte hangi güvenlik ayrıntılarına ihtiyacınız olduğuna bağlı. Dağıtılmış bir mikro hizmet kümesi varsa, yalnızca 80 bağlantı noktasını api ağ geçidine maruz bırakabilirsiniz. Gerisi dışarıdan engellenmelidir.
katma yazar ronaldofs, kaynak

Alternatif bir yaklaşım, kimlik doğrulama/yetkilendirme ile diğer hizmetlere erişimi koruyan başka bir mikro servis oluşturmak olabilir. Bu, API Ağ Geçidi düzeniyle, buradaki ek bilgilerle ilgilidir: http://microservices.io/patterns/apigateway.html . Temel olarak, sisteminize tek bir giriş noktanız olacaktı ve istemci kimlik doğrulamasını yürütmek için oauth veya json web belirteçlerini kullanabilirsiniz.

Ayrıca, mikro hizmetler arasında güvenli erişim, http isteğinde ek başlıklar ve işaretler gibi bir şey kullanılarak da sağlanabilir ("dahili" kimlik doğrulaması).

Benim görüşüme göre, mikro hizmetler bu sorumluluğa sahip olmamalıydı çünkü muhtemelen uygulamanızdaki auth mantığını paylaşmak/çoğaltmak zorunda kalacaksınız.

Başka bir notta, ID'leri "yabancı anahtar" olarak paylaşmak, ilgili verilerinizi ayırmak için iyi bir yaklaşımdır.

4
katma
Evet bu tam olarak api ağ geçidi için yapıldığı şey. Sorun şudur: Bir kullanıcı faturalandırma apisine ana bilgisayarından: portundan erişmeye çalışırsa? İsteği işleyen ve authservice adındaki api ağ geçidi olduğunu bilerek, güvenlik sorunum var gibi görünüyor ... :-)
katma yazar mfrachet, kaynak
Auth hizmetinden her zaman geçmek için Faturalandırma hizmeti içindeki kompozisyonu kullanabilirsiniz. Burada örnek: stackoverflow.com/questions/31044380/…
katma yazar Nima Gardideh, kaynak
Bağlantı noktalarını engelleyerek bu mikro hizmetlere erişimi sınırlayabilirsiniz. Veya dediğim gibi, korumalı servisleriniz arasında bir çeşit paylaşılan jeton alabilirsiniz. Gerçekte hangi güvenlik ayrıntılarına ihtiyacınız olduğuna bağlı. Dağıtılmış bir mikro hizmet kümesi varsa, yalnızca 80 bağlantı noktasını api ağ geçidine maruz bırakabilirsiniz. Gerisi dışarıdan engellenmelidir.
katma yazar ronaldofs, kaynak

Alternatif bir yaklaşım, kimlik doğrulama/yetkilendirme ile diğer hizmetlere erişimi koruyan başka bir mikro servis oluşturmak olabilir. Bu, API Ağ Geçidi düzeniyle, buradaki ek bilgilerle ilgilidir: http://microservices.io/patterns/apigateway.html . Temel olarak, sisteminize tek bir giriş noktanız olacaktı ve istemci kimlik doğrulamasını yürütmek için oauth veya json web belirteçlerini kullanabilirsiniz.

Ayrıca, mikro hizmetler arasında güvenli erişim, http isteğinde ek başlıklar ve işaretler gibi bir şey kullanılarak da sağlanabilir ("dahili" kimlik doğrulaması).

Benim görüşüme göre, mikro hizmetler bu sorumluluğa sahip olmamalıydı çünkü muhtemelen uygulamanızdaki auth mantığını paylaşmak/çoğaltmak zorunda kalacaksınız.

Başka bir notta, ID'leri "yabancı anahtar" olarak paylaşmak, ilgili verilerinizi ayırmak için iyi bir yaklaşımdır.

4
katma
Evet bu tam olarak api ağ geçidi için yapıldığı şey. Sorun şudur: Bir kullanıcı faturalandırma apisine ana bilgisayarından: portundan erişmeye çalışırsa? İsteği işleyen ve authservice adındaki api ağ geçidi olduğunu bilerek, güvenlik sorunum var gibi görünüyor ... :-)
katma yazar mfrachet, kaynak
Auth hizmetinden her zaman geçmek için Faturalandırma hizmeti içindeki kompozisyonu kullanabilirsiniz. Burada örnek: stackoverflow.com/questions/31044380/…
katma yazar Nima Gardideh, kaynak
Bağlantı noktalarını engelleyerek bu mikro hizmetlere erişimi sınırlayabilirsiniz. Veya dediğim gibi, korumalı servisleriniz arasında bir çeşit paylaşılan jeton alabilirsiniz. Gerçekte hangi güvenlik ayrıntılarına ihtiyacınız olduğuna bağlı. Dağıtılmış bir mikro hizmet kümesi varsa, yalnızca 80 bağlantı noktasını api ağ geçidine maruz bırakabilirsiniz. Gerisi dışarıdan engellenmelidir.
katma yazar ronaldofs, kaynak