bahadirakin.dev Bahadirakin.dev

   
Bahadır AKIN | Tecrübe ihtiyacınız geçtikten sonra edinilir

Domain Summary

What is the traffic rank for Bahadirakin.dev?

• Bahadirakin.dev ranks #14,160,059 globally on HypeStat.

What IP addresses does Bahadirakin.dev resolve to?

• Bahadirakin.dev resolves to the IP addresses 216.239.36.21.

Where are Bahadirakin.dev servers located in?

• Bahadirakin.dev has servers located in Mountain View, California, 94035, United States.

bahadirakin.dev Profile

Title:Bahadır AKIN | Tecrübe ihtiyacınız geçtikten sonra edinilir Description:Mikro servislerin kullanımı arttıkça, bloklanmış bir threadin etkilerini de daha fazla hissetmeye baÅŸladık. Fakat bu etkiyi azaltmanın yolları mevcut ve bu yollardan biri de asenkron ve baÅŸtan sonra bloklanmayan servisler yazmak. Bu yazıda elimden geldiÄŸince asenkron servislerin yararlarından ve baÅŸtan sona asenkron bir servisin nasıl geliÅŸtirilebileceÄŸinden (kısaca) bahsedeceÄŸim. Asenkron vs Senkron Öncelikle asenkton ya da senkron derken neyi kastettiÄŸimi bir örnek üzerinden anlatalım. Mesela, socket üzerinden byte array olarak gönderilen cümleleri okuyup String'e çeviren ve sonrasında da ekrana yazdıran bir uygulama geliÅŸtirdiÄŸimizi varsayalım. Tabiki bunu bir çok ÅŸekilde yapabilirsiniz ama ben iki türüne odaklanmak istiyorum. İlk uygulamamızda, uygulamamızı çalıştıran ana thread gider socketi açar ve veriyi beklemeye baÅŸlar. Veri alışını tamamladıktan sonra veriyi String'e çevirir ve ekrana yazdırır. Burada ana threadimiz veri gelene kadar bloklanmış bir ÅŸekilde bekleyecektir. İkinci yöntem ise, uygulamanızı çalıştırırsınız, uygulamanız gider soketi açar fakat socketi açarken, veri geldiÄŸinde çalışmasını istediÄŸi fonksiyonu da belirtir. Bundan sonra ana threadiniz veri gelene kadar özgürdür ve baÅŸka iÅŸler için kullanılabilir, yani bloklanmaz. Peki asenkron ve senkron kavramları nerede devreye giriyor? Tahmin edebileceÄŸiniz gibi ilk örnek senkron olarak tasarlanabilir. Yani tüm iÅŸlemler aynı thread üzerinde yapılabilir. İkinci örnek ise kolaylıkla asenkron hale getirilebilir ve socketten bilgiyi alacak fonksiyon ayrı bir thread üzerinde, String'e çeviren ayrı bir threadte ve ekrana basma iÅŸlemi yine ayrı bir thread üzerinde tanımlanabilir. İsterseniz tam tersini, ilk örneÄŸi asenkron ikinci örneÄŸi senkron yapmayı da deneyebilirsiniz ama bu sadece iÅŸinizi zorlaÅŸtıracaktır. Aynı örnek üzerinden devam edecek olursak, asenkron ya da senkron olmasının ne gibi farkları olabilir biraz bunlara bakalım. İki farklı uygulamamıza socket üzerinden kimi daha uzun kimi daha kısa ÅŸekilde farklı farklı cümleler geliyor. Senkron olan uygulamamızda, tüm cümleler sockete yazıldıkları ÅŸekilde ekrana basılacaktır fakat asenkron olan uygulamamızda, kısa bir cümle kendinden önce gönderilmiÅŸ uzun bir cümleden önce ekrana yazılabilir. (Tabi String'e çevirme iÅŸleminin cümle uzunluÄŸuna baÄŸlı olarak çok daha uzun süreceÄŸini varsayıyorum.) Yani asenkron uygulamamız cümle uzunluÄŸunun doÄŸurabileceÄŸi sorunlardan/gecikmelerden daha az etkilenecektir. DoÄŸal olarak eÄŸer ekranı okuyan bir kullanıcılarınız varsa, sadece uzun cümleyi bekleyen kullanıcınız etkilenecektir. Tabi eÄŸer cümlelerin sırasının korunması gibi bir gereksiniminiz varsa asenkron uygulamanızın baÅŸka iÅŸlemler de yapması gerekecektir. Performans açısından baktığımızda, bu durum genelde asenkron olan uygulamanın cümleleri daha hızlı çevirdiÄŸi gibi bir algı oluÅŸturuyor. Fakat yapacağınız iÅŸlem deÄŸiÅŸmediÄŸinden asenkron bir yapı birim çevirme hızınızı deÄŸiÅŸtirmeyecektir. ÖrneÄŸin senkron uygulamanız bir veriyi okuyup, String'e çevirip ekrana ortalama 5 ms'de basıyorsa, asenkron uygulamanızda da bu 5 ms'e sürecektir. Fakat asenkron uygulamanız CPU'yu daha verimli kullanacağından ekrana daha fazla cümle (throughput) yazdırabilirsiniz. ÖrneÄŸin senkron uygulamanız saniyede ekrana 200 cümle yazdırabiliyorsa, asenkron uygulamanız saniyede 1800 cümle yazdırabilir. Asenkron yapıların diÄŸer bir yararı da uygulamızın kabul edebileceÄŸi baÄŸlantı sayısını arttırmasıdır. BaÄŸlantıyı kabul eden threadlerin de aynı mantıkla çalışacağını düşünürseniz bu sizi ÅŸaşırtmayacaktır. BaÄŸlantıyı kabul eden thread, talebi içerideki baÅŸka bir thread havuzuna iletecek ve sıradaki baÄŸlantıyı kabul etmeye baÅŸlayabilecektir. Peki herÅŸey bu kadar güzelse neden tüm uygulamalar asenkron olarak yazılmıyor? Çünkü yazdığınız uygulamanızın gereklilikleri asenkron uygulamanızdan alacağınız yararı arttırıp azaltabilir. Az önceki örnekteki gibi IO yoÄŸun iÅŸlemler yapan bir uygulama geliÅŸtiriyorsanız, bloklanmayan yapılardan daha fazla yarar saÄŸlayacaksınızdır fakat bunun tersi olarak CPU yoÄŸun bir uygulamanız varsa asenkron yapıdan saÄŸlayacağınız yarar azalacaktır. Bunun yanı sıra, asenkron yapının geliÅŸtirmesi ve testi de senkron bir yapıya göre daha zor olduÄŸundan, senkron bir yapı daha çok tercih edilebiliyor. Tüm bu avantajlarını ve dezavantajlarını göz önüne aldığımızda, bloklanmayan yapıların mikro servisler için ne kadar önemli olduÄŸunu görüyoruz. Bir mikro servis mimarisinde, çoÄŸu servis baÅŸka bir servisi tüketmekte (IO) ve tükettiÄŸi servis üzerine küçük bir birimlik iÅŸ yapmaktadır. Yani, gerçekten mikro servislerle oluÅŸturulmuÅŸ bir uygulamada asenkron yapının getirdiÄŸi faydalardan sonuna kadar yararlanabiliriz. Bu arada, büyük ÅŸirketler de yavaÅŸ yavaÅŸ bu yapıya geçiyorlar. ÖrneÄŸi Netflix'in bununla ilgili çok güzel bir yazısına ÅŸurdan ulaÅŸabilirsiniz. Canlı ortamlarını bloklanmayan yapıya geçirdiklerinde deneyimledikleri yararlardan bahsediyorlar. Örnek Proje Spring Boot, Spring MVC ve Java 8 kullanarak, nasıl bir bloklanmayan servis geliÅŸtireceÄŸimize bakalım. Ben örnek olması açısından HttpBin servisini tüketeceÄŸim. HttpBin bize bir ip servisi sunuyor. Bu ip servisinden dış ip'nizi öğrenebiliyorsunuz. Yazacağımız servis ise sadece bu servisi çağırıp sonucu bize dönecek. Projenin Yaratılması Intellij'de Spring Initializer ya da start.spring.io kullanarak Spring Boot projemizi yaratıyoruz. Ben aÅŸağıdaki bilgilerle yarattım, siz istediÄŸiniz ÅŸekilde yaratabilirsiniz. Proje Adı: jdk8-async-mvc Group Id: com.bahadirakin Artifact Id: jdk8-async-mvc Package Name: com.bahadirakin HttpBin Entegrasyonu Öncelikle HttpBin ile entegre olalım. Ben istemci için Retrofit kullanacağım. Bunun bir kaç sebebi var: Java 8 ile gelen CompletableFuture'ı destekliyor. Bir çok Java kütüphanesiyle güzel bir ÅŸekilde entegre olabiliyor. Mesela JSON dönüşümü için ister GSON kullanın ister Jackson kullanın. Spring MVC ile birlikte Jackson geldiÄŸinden ben Jackson kullanacağım. Interface üzerinden istemci oluÅŸturabiliyorsunuz. EÄŸer Spring'in RestTemplate'ini kullanacak olsam çoÄŸru ÅŸeyi kendim halletmem gerekecek. Retrofit'te ise interface geliÅŸtirip doÄŸruca istemciye dönüştürebiliyorum. Öncelikle maven bağımlılıklarımızı ekleyelim: pom.xml [crayon-5d164465d99b4757792123/] HttpBin'in Ip servisi bize ÅŸu ÅŸekilde JSON'lar dönüyor. [crayon-5d164465d99c0803642805/] Åžimdi bunu dönüştüreceÄŸimiz modelimizi/DTOmuzu oluÅŸturalım. Bunun için com.bahadirakin.model paketinin altına Ip isminde bir sınıf yaratıyoruz. İçeriÄŸi aÅŸağıdaki gibi olacak. Ip.java [crayon-5d164465d99c6632893454/] Modelimizi yarattığımıza göre, ÅŸimdi de Interface'imizi yaratalım. Bunun için com.bahadirakin.service paketinin altına HttpBinService isminde bir interface yaratıyoruz. HttpBinService.java [crayon-5d164465d99cb128779723/] Son olarak, entegrasyonumuzun son halkasını yapıyoruz. Bu interface sınıfından istemcimizi oluÅŸturacağız. Bunun için bir com.bahadirakin paketinin altına ClientConfiguration sınıfını oluÅŸturuyoruz. ClientConfiguration.java [crayon-5d164465d99d0912940779/] Burada dikkat etmenizi istediÄŸim bir kaç nokta var. Sadece bir istemci yaratıyor olabiliriz ama birden fazla thread pool ayarlaması yapıyoruz. Bunlardan biri baÄŸlantılar için. DiÄŸeri ise asenkron çalıştıracağımız metodlar için. Socket örneÄŸinde olduÄŸu gibi, istemcimize fonksiyon vereceÄŸiz. İstemcimiz ise bu fonksiyonu "clientCallbackExecutor" içerisinde çalıştıracak IpController Entegrasyonu tamamladığımıza göre kendi Controller'ımızı yazabiliriz. Bunun için bir com.bahadirakin.control

What technologies does bahadirakin.dev use?

These are the technologies used at bahadirakin.dev. bahadirakin.dev has a total of 8 technologies installed in 9 different categories.

bahadirakin.dev Traffic Analysis

Bahadirakin.dev is ranked #14,160,059 in the world.
Daily Visitors n/a
Monthly Visits n/a
Pages per Visit n/a
Visit duration n/a
Bounce Rate n/a
Is this your site?Verify your site's metrics.
Daily Unique Visitors:
 n/a
Monthly Visits:
n/a
Pages per Visit:
n/a
Daily Pageviews:
n/a
Avg. visit duration:
n/a
Bounce rate:
n/a
Global Reach:
 n/a
HypeRank:
14,160,059
*All traffic values are estimates only.
Last update was 2213 days ago
     
This can take up to 60 seconds. Please wait...

*HypeStat.com is not promoting or affiliated with bahadirakin.dev in any way. Only publicly available statistics data are displayed.

 

SEMrush is a complete on line advertising and marketing platform that gives a extensive variety of gear and functions to help companies and entrepreneurs in enhancing their on line visibility and optimizing their virtual advertising and marketing strategies.
SemRushSemRush
Domain:
  bahadirakin.dev
Rank:
(Rank based on keywords, cost and organic traffic)
  n/a
Organic Keywords:
(Number of keywords in top 20 Google SERP)
  0
Organic Traffic:
(Number of visitors coming from top 20 search results)
  0
Organic Cost:
((How much need to spend if get same number of visitors from Google Adwords)
  $0.00

Ad Experience Report

Summary of the ad experience rating of a website for a specific platform.

Mobile summary

Root domain:
bahadirakin.dev
Ad filtering:
(Chrome is not filtering ads on your site.)
Off
Status:
(The status of the site that is reviewed for the Better Ads Standards.)
Not reviewed

Desktop summary

Root domain:
bahadirakin.dev
Ad filtering:
(Chrome is not filtering ads on your site.)
Off
Status:
(The status of the site that is reviewed for the Better Ads Standards.)
Not reviewed

Abusive Experience Report

Summary of the abusive experience rating of a website.
Root domain:
bahadirakin.dev
Enforcement:
(Chrome is not preventing your site from opening new windows or tabs.)
Off
Status:
(The status of the site reviewed for the abusive experiences.)
Not reviewed

Where is bahadirakin.dev hosted?

Bahadirakin.dev may be hosted in multiple data centers distributed in different locations around the world. This is probably just one of them.
Server IP:
216.239.36.21
ASN:
AS15169 
ISP:
Google LLC 
Server Location:
Mountain View
California, CA
94035
United States, US
 

Other sites hosted on 216.239.36.21

Does bahadirakin.dev use compression?

Website compression is the process of reducing the size of website files, such as HTML, CSS, JavaScript, and image files, to improve website performance and load times. Compressing website files can significantly reduce the amount of data that needs to be transferred from the server to the user's browser, resulting in faster page load times and improved user experience. Files on bahadirakin.dev are reduced by %.
bahadirakin.dev does not use compression.
Original size: n/a
Compressed size: n/a
File reduced by: (%)

Google Safe Browsing

Google Safe Browsing is a service provided by Google that helps protect users from visiting websites that may contain malicious or harmful content, such as malware, phishing attempts, or deceptive software.
This site is not currently listed as suspicious

SSL Checker - SSL Certificate Verify

An SSL (Secure Sockets Layer) certificate is a digital certificate that establishes a secure encrypted connection between a web server and a user's web browser. It provides authentication and encryption, ensuring that data transmitted between the server and the browser remains private and protected. bahadirakin.dev does not support HTTPS.
 bahadirakin.dev does not support HTTPS
     
Verifying SSL Support. Please wait...

Verify HTTP/2 Support

HTTP/2 (Hypertext Transfer Protocol version 2) is a major revision of the HTTP protocol, which is the foundation of data communication on the World Wide Web. It was developed as an improvement over the previous HTTP/1.1 version to enhance web performance and efficiency.
 bahadirakin.dev does not support HTTP/2
     
Verifying HTTP/2.0 Support. Please wait...

Http Header

HTTP headers are extra portions of records despatched among a consumer (which include an internet browser) and a server at some stage in an HTTP request or response. They offer instructions, metadata, or manipulate parameters for the conversation among the consumer and server.
Connection: close
Pragma: no-cache
cache-control: no-cache
Location: /KinRl/

HTTP/1.1 302 Found
Connection: close
Pragma: no-cache
cache-control: no-cache
Location: /

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: text/html; charset=utf-8
Expires: -1
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Sat, 29 Jun 2019 07:29:01 GMT
Content-Length: 477
Age: 8
Connection: keep-alive
Date: Sat, 29 Jun 2019 07:29:03 GMT
Server: Apache/2.2.15 (CentOS)
X-Powered-By: PHP/5.3.3
location: 
Content-Length: 0
Connection: close
Content-Type: text/html; charset=UTF-8
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=15
Date: Sat, 29 Jun 2019 07:29:06 GMT
Server: Apache
Last-Modified: Wed, 16 Jan 2019 17:07:10 GMT
ETag: W/"e5-57f964f0142b7"
Content-Encoding: gzip
Server: nginx/1.14.2
Date: Sat, 29 Jun 2019 07:29:09 GMT
Content-Type: text/html
Content-Length: 185
Connection: keep-alive
Keep-Alive: timeout=20
Location: https://neko.dev/
Strict-Transport-Security: max-age=63072000
X-Content-Type-Options: nosniff

HTTP/2 200 
server: nginx/1.14.2
date: Sat, 29 Jun 2019 07:29:09 GMT
content-type: text/html; charset=UTF-8
content-length: 1442
last-modified: Thu, 28 Feb 2019 21:28:32 GMT
etag: "5c785280-5a2"
strict-transport-security: max-age=63072000
x-content-type-options: nosniff
accept-ranges: bytes
Server: nginx
Date: Sat, 29 Jun 2019 07:29:22 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 50
Connection: keep-alive
Location: http://www.illumipress.com/
X-Served-By: Namecheap URL Forward

HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Sat, 29 Jun 2019 07:29:22 GMT
Content-Type: text/html
Content-Length: 178
Connection: keep-alive
Location: https://www.illumipress.com/
X-Powered-By: EasyEngine v4.0.10

HTTP/2 200 
server: nginx
date: Sat, 29 Jun 2019 07:29:22 GMT
content-type: text/html; charset=UTF-8
vary: Accept-Encoding
link: <https://www.illumipress.com/wp-json/>; rel="https://api.w.org/"
x-srcache-fetch-status: MISS
x-srcache-store-status: BYPASS
content-encoding: gzip
x-powered-by: EasyEngine v4.0.10
Content-Type: text/html; charset=UTF-8
Location: http://www.677199.xyz/
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Sat, 29 Jun 2019 07:29:12 GMT
Content-Length: 145

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Vary: Accept-Encoding
Server: Microsoft-IIS/7.5
Set-Cookie: ASP.NET_SessionId=v4jxrxhhse35uhvxq2eoxmke; path=/; HttpOnly
X-AspNetMvc-Version: 5.2
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Sat, 29 Jun 2019 07:29:12 GMT
Content-Length: 7950
Content-Type: text/html; charset=UTF-8
Location: https://gwbdriverapp.com/
Server: Microsoft-IIS/8.0
X-Powered-By: ASP.NET
Date: Sat, 29 Jun 2019 07:29:26 GMT
Content-Length: 148

HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=UTF-8
Location: https://www.gwbdriverapp.com/
Server: Microsoft-IIS/8.0
X-Powered-By: ASP.NET
Date: Sat, 29 Jun 2019 07:29:26 GMT
Content-Length: 152

HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=UTF-8
Location: https://www.gwbdriverapp.com/driverapp/login.aspx
Server: Microsoft-IIS/8.0
X-Powered-By: ASP.NET
Date: Sat, 29 Jun 2019 07:29:26 GMT
Content-Length: 172

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
Set-Cookie: ASP.NET_SessionId=remyweg3pavz5khgwockqphi; path=/; HttpOnly
X-Powered-By: ASP.NET
Date: Sat, 29 Jun 2019 07:29:27 GMT
Content-Length: 13837
Date: Sat, 29 Jun 2019 07:29:28 GMT
Server: Apache/2.4.39 (Unix)
Content-Length: 4508
Content-Type: text/html
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=15
Date: Sat, 29 Jun 2019 07:29:29 GMT
Server: Apache
X-Powered-By: PHP/7.2.19
Content-Encoding: gzip
Server: nginx
Date: Sat, 29 Jun 2019 07:29:50 GMT
Content-Type: text/html; charset=iso-8859-1
Content-Length: 235
Connection: keep-alive
Location: https://trust-motherly.xyz/

HTTP/2 200 
server: nginx
date: Sat, 29 Jun 2019 07:29:51 GMT
content-type: text/html
vary: Accept-Encoding
last-modified: Sat, 27 Apr 2019 14:21:32 GMT
etag: W/"3431-58783c498cbc8"
content-encoding: gzip
Connection: close
Pragma: no-cache
cache-control: no-cache
Location: /dOmTn/

HTTP/1.1 302 Found
Connection: close
Pragma: no-cache
cache-control: no-cache
Location: /

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: text/html; charset=utf-8
Expires: -1
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Sat, 29 Jun 2019 07:29:53 GMT
Content-Length: 473
Age: 0
Connection: keep-alive
Date: Sat, 29 Jun 2019 07:29:55 GMT
Server: Apache
Location: http://berlin.amalnews.de/
Content-Length: 234
Content-Type: text/html; charset=iso-8859-1

HTTP/1.1 301 Moved Permanently
Date: Sat, 29 Jun 2019 07:29:56 GMT
Server: Apache
Location: https://berlin.amalnews.de/
Content-Length: 235
Content-Type: text/html; charset=iso-8859-1

HTTP/2 302 
date: Sat, 29 Jun 2019 07:29:56 GMT
server: Apache
location: https://amalnews.de/wp-signup.php?new=berlin
vary: User-Agent
content-length: 0
content-type: text/html

HTTP/2 301 
date: Sat, 29 Jun 2019 07:29:58 GMT
server: Apache
expires: Wed, 11 Jan 1984 05:00:00 GMT
cache-control: no-cache, must-revalidate, max-age=0
x-redirect-by: WordPress
location: https://amalberlin.de
vary: User-Agent
content-length: 0
content-type: text/html; charset=UTF-8

HTTP/2 200 
date: Sat, 29 Jun 2019 07:29:59 GMT
server: Apache
link: <https://amalberlin.de/wp-json/>; rel="https://api.w.org/", <https://amalberlin.de/>; rel=shortlink
vary: Accept-Encoding,User-Agent
content-encoding: br
content-type: text/html; charset=UTF-8
Location: http://bahadirakin.com
Date: Sat, 29 Jun 2019 07:30:02 GMT
Content-Type: text/html; charset=UTF-8
Server: ghs
Content-Length: 219
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN

HTTP/1.1 301 Moved Permanently
X-Powered-By: PHP/5.6.40
Content-Type: text/html; charset=UTF-8
Location: http://www.bahadirakin.com/
X-LiteSpeed-Cache: hit
Content-Length: 0
Date: Sat, 29 Jun 2019 07:30:00 GMT
Server: LiteSpeed
Connection: Keep-Alive

HTTP/1.1 200 OK
X-Powered-By: PHP/5.6.40
Content-Type: text/html; charset=UTF-8
Link: <http://www.bahadirakin.com/wp-json/>; rel="https://api.w.org/"
Link: <https://wp.me/2c1xv>; rel=shortlink
Etag: "8168-1561740390;br"
X-LiteSpeed-Cache: hit
Transfer-Encoding: chunked
Content-Encoding: br
Vary: Accept-Encoding
Date: Sat, 29 Jun 2019 07:30:00 GMT
Server: LiteSpeed
Connection: Keep-Alive